3

我目前有这样的事情:

class Article

  # fields = [flag, something]

  after_create :update_flag

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

但是当我更改某些字段时,它不会更改“标志”字段。我已经保存了对象。仍然没有变化。

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

a.flag
> 0

有任何想法吗?

4

3 回答 3

5

改变

after_create

after_update

在您的代码示例中,您正在更新对象,这就是您需要不同钩子的原因。请参阅文档以获取更多信息。

于 2012-07-14T10:37:44.767 回答
0
after_create()

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

after_save()

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

于 2016-01-20T07:40:31.457 回答
0

将“after_create”更改为“after_save”,因为 after_create 只工作一次——就在第一次创建记录之后,并且每次保存对象时 after_save 工作——即使你只是在多年后更新它。

参考- `after_create` 和 `after_save` 有什么区别,何时使用?

于 2016-11-17T06:28:16.207 回答