我似乎记得在某处读过,如果没有更改任何属性(可能是活动记录脏的一部分),rails 不会提交到数据库,是这样吗?我似乎无法找到它,并且快速浏览了源代码后也不明智。
如果这是错误的,我需要使用 before_save 回调,因为我想根据是否发生更改来运行一些代码。
我假设使用脏数据的 after_save 不起作用?
我似乎记得在某处读过,如果没有更改任何属性(可能是活动记录脏的一部分),rails 不会提交到数据库,是这样吗?我似乎无法找到它,并且快速浏览了源代码后也不明智。
如果这是错误的,我需要使用 before_save 回调,因为我想根据是否发生更改来运行一些代码。
我假设使用脏数据的 after_save 不起作用?
Rails 不会这样做,但即使没有任何变化UPDATE
,它也会运行回调:after_save
pry $ u = User.first
=> #<User id: 1, email: "dave@davebryand.com", username: "dbryand"...
pry $ u.updated_at
=> Tue, 24 Jun 2014 18:36:04 UTC +00:00
pry $ u.changed?
=> false
pry $ u.save
From: /Users/dave/Projects/sample/app/models/user.rb @ line 3 :
1: class User < ActiveRecord::Base
2:
=> 3: after_save -> { binding.pry }
pry $ exit
=> true
pry $ u.updated_at
=> Tue, 24 Jun 2014 18:36:04 UTC +00:00
如果您想根据 a 中特定属性的更改做一些事情before_save
,只需执行以下操作:
pry $ u = User.first
=> #<User id: 1, email: "dave@davebryand.com", username: "dbryand"...
pry $ u.save
=> true
pry $ u.name = "John Doe"
=> "John Doe"
pry $ u.save
From: /Users/dave/Projects/sample/app/models/user.rb @ line 3 :
1: class User < ActiveRecord::Base
2:
=> 3: before_save -> { binding.pry if name_changed? }
这里的脏文档:http: //api.rubyonrails.org/classes/ActiveModel/Dirty.html