保存后,ActiveRecord回调after_save没有真正调用

fgu*_*len 1 ruby activerecord callback ruby-on-rails-3

有这个:

class User < ActiveRecord::Base
  after_save :execute_after_save

  def execute_after_save
    Kernel.puts "Actual object still not saved" if changed?
  end
end
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

查看Actual object still not saved不应该存在的所有句子.

我期待在保存对象后after_save实际调用回调.

这种情况正在转向我疯了的一些组合dirty objects,并callbacks认为我必须做的.

小智 6

它是在保存之后但在提交之前.

after_commit 可能是你正在寻找的东西.