我有一个模型,其中带有Paperclip附加的视频。保存后,我使用保存的视频生成缩略图。即使没有上传新视频,我也需要在每次保存后执行此操作,因为用户可以更改捕获缩略图的时间。
我目前正在使用after_post_process来执行此操作,但是它只会在上传文件时生成缩略图(这是Paperclip的一部分的回调)。
理想情况下,我将使用after_save回调,如下所示:
after_save :save_thumbnail
def save_thumbnail
#generate thumbnail...
self.update_attributes(
:thumbnail_file_name => File.basename(thumb),
:thumbnail_content_type => 'image/jpeg'
)
end
不幸的是,update_attributes调用save,然后调用before_save回调导致无限循环。有没有简单的方法来规避这种行为?
最佳答案
您可以将其包装为有条件的,例如:
def save_thumbnail
if File.basename(thumb) != thumbnail_file_name
self.update_attributes(
:thumbnail_file_name => File.basename(thumb),
:thumbnail_content_type => 'image/jpeg'
)
end
end
这样,它只会运行一次。
关于ruby-on-rails - 如何在after_save中更新属性而又不引起Rails 2.3的递归?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6681285/