2009-05-27 7 views
3

イメージを添付した「写真」クラスがあります。私が写真の注文を並べ替えるためにページに行くと、各写真が反復され、新しい「並べ替え」値が設定され、保存されます。これまでのすべての良い。attachment_fu:サムネイルを再読み込みしない

問題は、私はこの動作がかなり遅いことに気付きました。つまり、attachment_fuは、新しい画像データがあるかどうかにかかわらず、すべての保存時にサムネイルをリロードします。

明らかに、このシステムは十分に考察されているので、この状況のた​​めの規定が存在すると仮定することができます。適切でないときにサムネイルを再生成しないようにattachment_fuに指示するにはどうすればよいですか?

おかげで、--Matchu

編集:私はちょうどこの特定の状況のた​​めに、私はかわすにすべての検証およびその他のコールバックをupdate_attribute使用することができ、ことを思い出しました。しかし、これは大規模なシナリオ全体に対して実行可能な答えではありません。私は何が欠けていますか?

+0

これは私にとっては奇妙に思えます。あなたはそれについてAttachmentFu devメーリングリストに投稿しましたか?あなたがSOコミュニティのためにここに投稿したり、望ましくない行為である場合にはあなたのパッチを投稿したりするために、動作の「権威的な」理由を得ることは役に立ちます。 –

答えて

3

ビットを入れてハッキングしましたが、save_attachment?の動作を書き換えました。かなり多く、私はいくつかの新しい条件を追加:既存の一時ファイルに加えて、以下のいずれかを満たしている必要があります

  1. をイメージ用ませファイルが既に(full_filename属性を使用して)存在しません。
  2. 画像データは、uploaded_data=メソッドを使用して明示的に更新されました。
  3. 画像はサムネイルです。

新しい写真のアップロード、写真の画像の編集、画像以外の写真の編集といった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:

...条件を確認してください。私は、データがuploaded_data = setterメソッドに渡されたかどうかを知るためのエレガントな方法を思いつくことができませんでした(誰かがこれを行うよりよい方法を持っていれば、私はすべて耳をついています;私はまだルビー/ )ので、私はまた、グローバル変数@active_upload設定する= uploaded_dataためにラインを追加しました:

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 

希望に役立ちます、と誰もが、私はグローバル変数であった事に処理するために、よりエレガントな方法を持っている場合、私は」それを聞くのが大好きです。

+0

私のアプローチは非常によく似ていました。私はGithubで自分の支店を作って、いくつかのテストも加えました。いくつかの他のブランチがアップデートを引っ張りましたが、私はメインブランチがそうしたとは思いません。 http://github.com/matchu/attachment_fu/tree/master – Matchu

関連する問題