我有一个模型,它有一个Paperclip附加的视频。保存后,我使用保存的视频生成缩略图。我需要在每次保存后执行此操作,即使新视频尚未上传,因为用户可以更改捕获缩略图的时间。
我目前正在使用after_post_process来做这件事,但它只会在上传文件时生成缩略图(这是一个回调,是回调的一部分)。
理想情况下,我会使用如下所示的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调用了before_save,然后调用了导致无限循环的save回调。有没有一种简单的方法来规避这种行为?
发布于 2011-07-13 23:41:47
您可以(也应该)检查是否确实需要更新缩略图:
after_save :save_thumbnail
def save_thumbnail
if capture_time_changed? #assuming capture_time contains time when the thumbnail has to be captured
#generate thumbnail...
self.update_attributes(
:thumbnail_file_name => File.basename(thumb),
:thumbnail_content_type => 'image/jpeg'
)
end
end在这里你可以阅读更多关于“脏”属性的内容:http://apidock.com/rails/ActiveRecord/Dirty
虽然我不确定它是否仍然可以看到after_save中的属性更改。您可以使用成员变量来指示更改,以防它不能。
https://stackoverflow.com/questions/6681285
复制相似问题