我有两个模型,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
字段?
答案 0 :(得分:0)
如果属于一个b,则a只有一个b - 所以它没有意义,你试图在a方法中迭代多个b。
修改
你不需要“自我”。如果你打电话给即时方法。 self用于声明类方法。
但最让我困惑的是,你试图在模型中保存一些东西。属于控制器!
答案 1 :(得分:0)
尝试使用update_attributes
def update_fields
b.each { |x| x.update_attributes(field: "5") }
end
或者
def b_method
update_attributes(field: "5")
end
答案 2 :(得分:0)
它最终成为验证的问题,因此一般方法有效。