【问题标题】:attachment_fu: Don't reload thumbnailsattachment_fu:不要重新加载缩略图
【发布时间】:2009-05-27 01:27:36
【问题描述】:

我有一个不错的小“照片”类,其中附有图像。当我转到页面对照片的顺序进行排序时,它会遍历每张照片,设置新的“排序”值并保存它。到目前为止一切顺利。

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

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

谢谢,--Matchu

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

【问题讨论】:

  • 这对我来说似乎很奇怪。您是否在 AttachmentFu 开发邮件列表上发布过有关它的信息?获得一个“权威”的理由将行为发回到这里为 SO 社区发布,或者如果它是不受欢迎的行为,则贡献你的补丁可能会有所帮助。

标签: ruby-on-rails attachment-fu


【解决方案1】:

进入并破解了 attachment_fu ,并重写了 save_attachment? 行为。几乎,我添加了一些新条件:除了存在临时文件之外,以下条件之一必须为真:

  1. 图像的文件不存在(使用full_filename 属性)。
  2. 图像数据已使用uploaded_data= 方法显式更新。
  3. 图片为缩略图。

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

【讨论】:

    【解决方案2】:

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

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

    我认为 Matchu 的解决方案可能是正确的解决方案,快速查看 attachment_fu 代码。如果 Matchu 可以分享他修改后的 save_attachment 的补丁或 sn-p,我会很高兴?方法。我将自己深入研究这个问题,因为这对我来说已经成为一个问题,而且它可能比完全替换 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提出的条件。我想不出一种优雅的方式来判断数据是否已传递给 upload_data=setter 方法(如果有人有更好的方法来做到这一点,我全神贯注;我仍然是 ruby​​/rails 菜鸟) 所以我还在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
    

    希望对您有所帮助,如果有人有更优雅的方式来处理我在全局变量中所做的事情,我很想听听。

    【讨论】:

    • 我的方法非常非常相似。我在 Github 上创建了自己的分支,并添加了一些测试。其他一些分支引入了更新,但我认为主分支没有。 github.com/matchu/attachment_fu/tree/master
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2016-03-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多