Viv*_*123 6 ruby-on-rails ruby-on-rails-3
我有一个模型存储零售店的详细信息.
在Outlet模型中,我有一个前置过滤器
after_save :is_outlet_verified
def is_outlet_verified
if self.latitude.present? && self.longitude.present?
self.update_attributes(:is_verified => true)
else
self.update_attributes(:is_verified => false)
end
end
Run Code Online (Sandbox Code Playgroud)
如果出口地理编码,我想设置is_verified字段true.但是,当成功执行is_outlet_verified时,它会触发after_save回调,这会再次触发is_outlet_verified.
sev*_*cat 17
理想情况下,你会在before_save回调中做这样的事情,而不是after_save- 只需设置is_verified属性然后让保存正常进行.
如果你真的需要这样做,你可以使用update_column而不是update_attribute,这将跳过所有回调.
需要注意的一点是 - 如果before_save回调返回false,则保存将不会继续.
.update_attributes调用该.save方法,因此调用它after_save会创建一个无限循环
我会这样做before_save,像这样:
before_save :is_outlet_verified
def is_outlet_verified
if self.latitude.present? && self.longitude.present?
self.is_verified = true
else
self.is_verified = false
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4999 次 |
| 最近记录: |