AnA*_*ice 11 ruby-on-rails activemodel ruby-on-rails-3
我听说rails有脏/改变标志.是否可以在after_commit回调中使用它?
在我的用户模型中,我有:
after_commit :push_changes
Run Code Online (Sandbox Code Playgroud)
在def push_changes我想知道名称字段是否更改的方法.那可能吗?
你可以做几件事来检查......
首先,您可以检查单个属性:
user = User.find(1)
user.name_changed? # => false
user.name = "Bob"
user.name_changed? # => true
Run Code Online (Sandbox Code Playgroud)
但是,您还可以检查整个模型中哪些属性已更改:
user = User.find(1)
user.changed # => []
user.name = "Bob"
user.age = 42
user.changed # => ['name', 'age']
Run Code Online (Sandbox Code Playgroud)
还有一些你可以做的事情 - 详情请查看http://api.rubyonrails.org/classes/ActiveModel/Dirty.html.
编辑:
但是,鉴于这是在after_commit回调中发生的,模型已经被保存,这意味着在保存之前发生的变化的知识将丢失.您可以尝试使用before_save回调自行选择更改,将它们存储在某处,然后在使用时再次访问它们after_commit.
| 归档时间: |
|
| 查看次数: |
9155 次 |
| 最近记录: |