0

我有两个模型,AB哪里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字段?

4

3 回答 3

0

尝试使用 update_attributes

def update_fields
  b.each { |x| x.update_attributes(field: "5") }
end

或者

def b_method
  update_attributes(field: "5")
end
于 2013-01-20T20:18:31.607 回答
0

它最终成为验证的问题,因此一般方法有效。

于 2013-02-15T13:44:54.243 回答
0

如果 a belongs_to b 那么 a 只有一个 b - 所以你尝试在 a 方法中迭代多个 b 是没有意义的。

编辑

你不需要“自我”。如果您调用即时方法。self 用于声明类方法。

但最让我困惑的是,你试图在模型中保存一些东西。属于控制器!

于 2013-01-20T20:08:10.423 回答