attachment_fu:サムネイルをリロードしないでください
-
06-09-2019 - |
質問
画像を添付した素敵な「写真」クラスがあります。写真の注文を並べ替えるためにページに行くと、それぞれの写真が繰り返され、新しい「ソート」値を設定して保存します。これまでのところすべて良い。
問題は、この動作がかなり遅いことに気付いたことです。結局のところ、Attachment_FUは、すべての保存でサムネイルをリロードします - 動作する新しい画像データがあるかどうかに関係なく。
明らかに、このシステムはよく考えられているので、私はこの状況の規定が存在すると仮定するだけです。適切でないときにサムネイルを再生しないように添付ファイルを伝えるにはどうすればよいですか?
ありがとう、 - マチュン
編集: この特定の状況では、update_attributeを使用してすべての検証やその他のコールバックをかわすことができることを思い出しました。ただし、これは大きなシナリオ全体に対する実行可能な答えではありません。何が足りないの?
解決
入って添付物をハッキングして少しハッキングして、 save_attachment?
行動。ほとんど、いくつかの新しい条件を追加しました。存在する温度ファイルに加えて、次のうちの1つが真でなければなりません。
- 画像のファイルは既に存在していません(を使用して
full_filename
属性)。 - 画像データは、を使用して明示的に更新されました
uploaded_data=
方法。 - 画像はサムネイルです。
新しい写真のアップロード、写真画像の編集、非イメージの写真データの編集など、3つのテストケースすべてに合格しますが、これはまだワイルドで実際にテストしていません。おそらくいくつかの修正を行う必要があります。何が起こるか見ていきます。
他のヒント
このトピックで私が見た唯一の適度に便利なスレッドはこちらです:
http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/709d97e06b373786
Matchuのソリューションは、Attachment_FUコードを簡単に確認することで、おそらく正しいものだと思います。 Matchuが彼の修正されたSave_Attachmentのパッチやスニペットを共有できれば、私はそれが大好きですか?方法。私は自分でこれを掘り下げようとしています。
アップデート
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
それが役立つことを願っています。そして、誰かが私がそこで行ったことをグローバル変数で処理するためのよりエレガントな方法を持っているなら、私はそれを聞いてみたいです。