【发布时间】:2013-02-12 17:24:33
【问题描述】:
有这个:
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 语句应该被称为 never,因为在对象被保存之后它并没有改变。
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 objects 和 callbacks 的一些组合让我发疯了,我必须这样做。
【问题讨论】:
-
重现问题的代码:gist.github.com/fguillen/4771248
标签: ruby ruby-on-rails-3 activerecord callback