繁体   English   中英

attachment_fu:不要重新加载缩略图

[英]attachment_fu: Don't reload thumbnails

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

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

显然这个系统已经过深思熟虑,所以我只能假设这种情况存在一个条款。 如果不合适,我如何告诉attachment_fu不重新生成缩略图?

谢谢, - 麦图

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

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

  1. 没有图像文件(使用full_filename属性)。
  2. 使用uploaded_data=方法显式更新图像数据。
  3. 图像是缩略图。

它通过了所有三个测试用例 - 新照片上传,编辑照片图像和编辑非图像照片数据 - 但我还没有真正在野外测试过。 我可能不得不做一些修复; 我们会看到会发生什么。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM