代码之家  ›  专栏  ›  技术社区  ›  Matchu

附件:不要重新加载缩略图

  •  3
  • Matchu  · 技术社区  · 16 年前

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

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

    显然,这个系统已经被很好地考虑过了,所以我只剩下假设这种情况下存在一个条款。如果不合适的话,我怎么告诉附件傅不要重新生成缩略图?

    谢谢, ——Matchu

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

    2 回复  |  直到 16 年前
        1
  •  3
  •   Matchu    16 年前

    进去把附件砍了一点,然后重写了 save_attachment? 行为。差不多,我添加了一些新的条件:除了现有的一个临时文件之外,还必须满足以下条件之一:

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

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

        2
  •  0
  •   sstrudeau    16 年前

    我在本主题中看到的唯一一个中等有用的线索是:

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

    我认为Matchu的解决方案很可能是正确的,可以快速查看附件代码。如果Matchu能分享他修改过的save_附件的一个补丁或一个片段,我会很高兴的。方法。我要自己来研究这个问题,因为这对我来说已经成了一个问题,而且这可能比完全替换附件要简单得多。

    更新

    根据Matchu的提纲,我想出了一个简短的(如果不美观的话)解决方案,它在光测试之后似乎可以工作。

    我修改了保存附件?在附件“fu/attachment”中:

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

    …检查Matchu布置的条件。我想不出一个优雅的方法来判断数据是否已经被传给上传的设置器方法(如果有人有更好的方法,我会全神贯注;我仍然是ruby/rails noob),所以我还添加了一行到上传的设置全局变量@active\u 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
    

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

    推荐文章