如何在Rails模型中正确挂钩到after_create

时间:2012-07-14 10:34:39

标签: ruby-on-rails-3

我目前有这样的事情:

class Article

  # fields = [flag, something]

  after_create :update_flag

  def update_flag
    self.flag = 1 if something_changed?
  end
end

但是当我更改某个字段时,它不会更改'flag'字段。我保存了这个物体。仍然没有变化。

a = Article.create(flag: 0, something: "content")
a.something = "different"
a.save

a.flag
> 0

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

更改

after_create

after_update

在您的代码示例中,您正在更新对象,这就是您需要不同钩子的原因。有关详细信息,请参阅docs

答案 1 :(得分:0)

after_create()

在Base.save之后调用尚未保存的新对象(不存在记录)。

after_save的()

在Base.save之后调用(无论是创建还是更新保存).`

答案 2 :(得分:0)

改变" after_create" to" after_save"因为after_create只能工作一次 - 就在首次创建记录之后每次保存对象时,after_save都会工作 - 即使您多年后才更新它。

参考 - What is the difference between `after_create` and `after_save` and when to use which?