【发布时间】:2012-07-04 02:44:58
【问题描述】:
我的模型中定义了以下after_save 回调。
after_save :validate_image, :publish, :update_some_data, :send_notifications
是否可以根据validate_image 中的某些条件跳过其余的after_save 回调,所以像这样 -
def validate_image
if image_not_valid
# skip rest of the callbacks in the after_save chain
destroy # destroy this record
end
end
注意:- 我也在根据该条件销毁记录,并且我有一些需要执行的“after_destroy”回调。
我正在使用带有 Mongoid v2.4.10 的 Rails v3.2.6,但我想如果它是 ActiveRecord 不会有什么不同。
【问题讨论】:
-
我发现在回调中再次保存相同的记录会触发更多的回调,因此没有好处。可能与破坏相同的问题。除了销毁(!)什么是保存操作之外,还有更好的方法吗?
-
如何将
validate_image移动为验证回调? -
我们使用 Carrierwave 进行图片上传,在“validate_image”中我们验证图片是否真的上传并且有效。我的理解是 Carrierwave 在 after_save 回调期间上传图片。
-
是的,Carrierwave 确实在 after_save 回调中上传。你知道错误会在 after_save 中回滚事务吗?事实上,如果图像没有真正上传,Carrierwave 应该发出异常。如果您正在检查自定义内容,您可以提出自己的错误
-
是的,这很奇怪,(对于某些图像)当我们点击上传的图像 URL 时,s3 抱怨该 URL(访问被拒绝)。这就是为什么作为后备我们正在检查上传的图像路径是否真的有效。我们通过“头部”检查来做到这一点。
标签: ruby-on-rails ruby-on-rails-3 activerecord mongoid