【发布时间】:2020-10-23 23:37:26
【问题描述】:
我有模特:
class MyModel
include Mongoid::Document
after_save :my_callback, if: -> { name_changed? }
field :name, type: String
def my_callback
# this will execute two times
puts 'executes my callback'
puts changes
end
end
想象一下,如果执行以下代码,当变量a 和b 接收相同的文档并且函数update! 使用相同的参数name: 'foo' 执行时。所以,在第一次更新中应该调用函数my_callback,但在第二次更新中不应该。
MyModel.create(name: 'bar')
a = MyModel.last
b = MyModel.last
a.update!(name: 'foo')
executes my callback
{"name"=>['bar', 'foo']}
=> true
b.update!(name: 'foo')
executes my callback -> this not can execute
{"name"=>['bar', 'foo']}
=> true
如何防止函数my_callback在第二次更新中运行?
【问题讨论】:
-
我建议阅读 Rails 指南中的 locking records for update。
标签: ruby callback mongoid after-save