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

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

显然,这个系统是经过深思熟虑的,所以我只想假设存在针对这种情况的规定。我该如何告诉attachment_fu在不合适的情况下不要再生缩略图?

谢谢, -Matchu

编辑: 我只记得,对于这种特殊情况,我可以使用Update_Attribute躲避所有验证和其他回调。但是,这并不是对整个大场景的可行答案。我想念什么?

有帮助吗?

解决方案

进去并稍微黑客插入了 save_attachment? 行为。我几乎添加了一些新条件:除了存在的临时文件外,以下一个必须为真:

  1. 没有图像的文件已经存在(使用 full_filename 属性)。
  2. 使用图像数据明确更新 uploaded_data= 方法。
  3. 图像是缩略图。

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

其他提示

我在此主题上看到的唯一中等有用的线程在这里:

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

我认为Matchu的解决方案可能是正确回顾Attactment_FU代码的正确解决方案。如果Matchu可以共享他的修改后的Save_attachment的补丁或片段,我会很喜欢它?方法。我将自己研究这个问题,因为这对我来说已经成为一个问题,而且工作可能比完全替换attactment_fu的工作要少。

更新

借助Matchu的大纲,我提出了一个简短的(如果不高)解决方案,该解决方案似乎在测试后起作用。

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

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

...检查条件匹配布局。我无法提出一种优雅的方法来判断数据是否已传递到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归因
不隶属于 StackOverflow
scroll top