3

私は現在このようなものを持っています:

class Article

  # fields = [flag, something]

  after_create :update_flag

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

しかし、somethingフィールドを変更しても、「flag」フィールドは変更されません。オブジェクトを保存しました。まだ変更はありません。

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 は 1 回だけ機能するためです。つまり、レコードが最初に作成された直後であり、オブジェクトを保存するたびに after_save が機能します。たとえ何年も後に更新したとしてもです。

参考- after_create と after_save の違いと使い分けは?

于 2016-11-17T06:28:16.207 に答える