我有一个Item对象,它有一个名为has_instore_image的布尔值,当在before_save方法中设置时,必须设置为0而不是false。有这样的原因吗?这是预期的行为吗?我使用的是Rails 3.2.19。
代码:
class Item < ActiveRecord::Base
attr_accessible :has_instore_image
before_save :set_has_instore_image
def set_has_instore_image
if self.instore_images.count>0
self.has_instore_image=true
else
self.has_instore_image=0
#self.has_instore_image=false
end
end
答案 0 :(得分:2)
来自回调中的Rails文档:
If a before_* callback returns false, all the later callbacks and the associated action are cancelled.
因此,当回调的最后一个表达式求值为false
时,会发生回调链,并且save
操作失败。
你可以这样补救:
def set_has_instore_image
if self.instore_images.count>0
self.has_instore_image=true
else
self.has_instore_image=false
end
true
end
事实上,结束before_*
所有回复true
回调定义以避免同样的问题,我们认为这是一种很好的做法。