我有一个很棒的小“照片”课,附有图片。当我转到页面对照片的顺序进行排序时,它会迭代每张照片,设置新的“排序”值并保存。到目前为止一切都很好。
问题是,我注意到这种行为相当慢。事实证明,attachment_fu会在每次保存时重新加载缩略图 - 无论是否有新的图像数据可供使用。
显然这个系统经过深思熟虑,所以我只能假设这种情况存在规定。如何判断attachment_fu在不合适的情况下不重新生成缩略图?
谢谢, - Matchu
编辑:我刚才记得,对于这种特殊情况,我可以使用update_attribute来躲避所有验证和其他回调。然而,对于整个大场景来说,这并不是一个可行的答案。我错过了什么?
答案 0 :(得分:3)
稍微进入并攻击attachment_fu,并重写了save_attachment?
行为。差不多,我添加了一些新条件:除了临时文件存在外,还必须满足下列条件之一:
full_filename
属性)。uploaded_data=
方法明确更新了图像数据。它通过了所有三个测试用例 - 新照片上传,编辑照片图像和编辑非图像照片数据 - 但我还没有真正在野外测试过。我可能不得不做一些修复;我们会看到会发生什么。
答案 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
希望有所帮助,如果有人用更优雅的方式处理我在全球变量中所做的事情,我很乐意听到它。