1

これを持っている:

class User < ActiveRecord::Base
  after_save :execute_after_save

  def execute_after_save
    Kernel.puts "Actual object still not saved" if changed?
  end
end

オブジェクトが保存された後は変更されないため、文は決してKernel.puts呼び出されるべきではありません。

1.9.3p286 :003 > u = User.create!(:name => "Wadus Name")
Actual object still not saved
 => #<User id: 1, name: "Wadus Name"> 
1.9.3p286 :004 > u.changed?
 => false 
1.9.3p286 :004 > u.name = "Other Name"
 => "Other Name" 
1.9.3p286 :005 > u.changed?
 => true 
1.9.3p286 :006 > u.save!
Actual object still not saved
 => true 
1.9.3p286 :007 > u.changed?
 => false 

Actual object still not savedそこにあるべきではないすべての文を参照してください。

オブジェクトが保存された後にafter_saveコールバックが実際に呼び出されることを期待していました。

この状況は、私がしなければならないいくつかの組み合わせに夢中になっdirty objectscallbacksいます。

4

1 に答える 1

6

保存後、コミット前です。

after_commitあなたが探しているものかもしれません。

于 2013-02-12T17:35:08.773 に答える