在Rails中调用外部模型方法

时间:2013-01-20 20:02:50

标签: ruby-on-rails ruby-on-rails-3 models

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

3 个答案:

答案 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)

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