attachment_fu:不要重新加载缩略图

时间:2009-05-27 01:27:37

标签: ruby-on-rails attachment-fu

我有一个很棒的小“照片”课,附有图片。当我转到页面对照片的顺序进行排序时,它会迭代每张照片,设置新的“排序”值并保存。到目前为止一切都很好。

问题是,我注意到这种行为相当慢。事实证明,attachment_fu会在每次保存时重新加载缩略图 - 无论是否有新的图像数据可供使用。

显然这个系统经过深思熟虑,所以我只能假设这种情况存在规定。如何判断attachment_fu在不合适的情况下不重新生成缩略图?

谢谢, - Matchu

编辑:我刚才记得,对于这种特殊情况,我可以使用update_attribute来躲避所有验证和其他回调。然而,对于整个大场景来说,这并不是一个可行的答案。我错过了什么?

2 个答案:

答案 0 :(得分:3)

稍微进入并攻击attachment_fu,并重写了save_attachment?行为。差不多,我添加了一些新条件:除了临时文件存在外,还必须满足下列条件之一:

  1. 图片的文件已存在(使用full_filename属性)。
  2. 使用uploaded_data=方法明确更新了图像数据。
  3. 图片是缩略图。
  4. 它通过了所有三个测试用例 - 新照片上传,编辑照片图像和编辑非图像照片数据 - 但我还没有真正在野外测试过。我可能不得不做一些修复;我们会看到会发生什么。

答案 1 :(得分:0)

我在这个主题上看到的唯一适度有用的主题是:

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/709d97e06b373786

我认为Matchu的解决方案可能是正确的,可以快速查看attachment_fu代码。如果Matchu可以共享他修改过的save_attachment的补丁或片段,我会喜欢它吗?方法。我将要自己深入研究这个问题,因为这对我来说已成为一个问题,而且完全取代attachment_fu可能不会那么重要......

更新

有了Matchu的大纲,我想出了一个简短的(如果不优雅的)解决方案,它似乎在光测试后起作用。

我修改了save_attachment?在attachment_fu / attachment_fu.rb中:

def save_attachment?
  return false unless (thumbnail || !full_filename || @active_upload) #added
  File.file?(temp_path.to_s)
end

......检查Matchu布局的条件。我无法想出一个优雅的方法来判断数据是否已经传递给uploaded_data = setter方法(如果有人有更好的方法来做到这一点,我都是耳朵;我仍然是ruby / rails noob )所以我还在uploaded_data =上添加了一行来设置全局变量@active_upload:

def uploaded_data=(file_data)
  return nil if file_data.nil? || file_data.size == 0
  self.content_type = file_data.content_type
  self.filename     = file_data.original_filename if respond_to?(:filename)
  @active_upload=true # added
  if file_data.is_a?(StringIO)
    file_data.rewind
    self.temp_data = file_data.read
  else
    self.temp_path = file_data
  end
end

希望有所帮助,如果有人用更优雅的方式处理我在全球变量中所做的事情,我很乐意听到它。