我有两个模型,A
和B
,其中A
has_many
B
。
在A
模型中,我有一个公共方法,它循环遍历所有相关的B
对象并更新每个对象中的数据库字段。我想在B
中使用这些方法,并在A
中运行循环,但它们似乎没有正确保存。这种方法有什么问题吗?
下面是一个方法的例子:
def update_fields # A Method
self.b.each do |b|
b.b_method
end
end
def b_method # B Method
self.field = '5'
self.save
end
运行这种类型的代码,没有保存到数据库中,输出也不更新。
我怎样才能完成这类事情?或者,是否所有的逻辑都需要在A
控制器,即使它处理B
字段?
如果a belongs_to b,那么a只有一个b -所以它没有意义,你试图在a方法中迭代多个b。
编辑如果你调用即时方法,你不需要"self."Self是用来声明类方法的。
但最让我困惑的是,你试图在模型中保存一些东西。它属于控制器!
尝试使用update_attributes
def update_fields
b.each { |x| x.update_attributes(field: "5") }
end
或
def b_method
update_attributes(field: "5")
end
这最终成为验证的问题,所以一般方法有效。