我有一个模型,其中带有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/

10-10 19:18