2009-05-27 45 views
3

我有一個很好的附加圖像的「照片」類。當我去頁面排序照片的順序時,它會遍歷每張照片,設置新的「排序」值並保存。迄今爲止都很好。attachment_fu:不要重新加載縮略圖

問題是,我注意到這種行爲相當緩慢。原來,attachment_fu會在每次保存時重新加載縮略圖 - 無論是否有新的圖像數據可用。

很明顯,這個系統已經經過深思熟慮,所以我只能假設爲這種情況提供了一個規定。如何告訴attachment_fu在不適合時重新生成縮略圖?

感謝,--Matchu

編輯:我只記得,對於這種特殊的情況,我可以用update_attribute閃避所有的驗證等回調。但是,這對於整個大場景來說並不是一個可行的答案。我錯過了什麼?

+0

這對我來說似乎很陌生。你有沒有在AttachmentFu開發者郵件列表上發佈它?獲得一個「權威」的理由可能會有助於將該行爲發回SO社區,或者如果它是不理想的行爲,則可以提供補丁。 – 2009-05-29 04:35:02

回答

3

加入並攻擊了attachment_fu一下,並重寫了save_attachment?行爲。好看多了,我增加了一些新的情況:除了一個臨時文件存在,執行下列操作之一必須是真實的:

  1. 沒有文件的圖像已經存在(使用full_filename屬性)。
  2. 使用uploaded_data=方法明確更新圖像數據。
  3. 圖片是一個縮略圖。

它通過了所有三個測試用例 - 新的照片上傳,編輯照片圖像和編輯非圖像照片數據 - 但我還沒有真正在野外測試過。我可能不得不做一些修復;我們會看到會發生什麼。

0

唯一我已經看到了這個話題比較有用的線程是在這裏:

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

我覺得Matchu的解決方案可能是正確的與attachment_fu代碼的快速審查。如果可以分享補丁或修改後的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 

...檢查條件是否正確。我無法想出一個優雅的方式來判斷數據是否已經傳遞到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 

希望幫助,如果任何人有一個更優雅的方式來處理我與全局變量確實存在,我d愛聽到它。

+0

我的方法非常非常相似。我在Github上創建了自己的分支,並添加了一些測試。更新中一些其他分支,但我認爲主要分支沒有。 http://github.com/matchu/attachment_fu/tree/master – Matchu 2009-07-14 02:44:07