3

画像が添付された素敵な小さな「写真」クラスがあります。写真の順序を並べ替えるページに移動すると、各写真が繰り返され、新しい「並べ替え」値が設定され、保存されます。これまでのところすべて順調です。

問題は、この動作がかなり遅いことに気付きました。結局のところ、attachment_fu は、操作する新しい画像データがあるかどうかに関係なく、保存するたびにサムネイルを再読み込みします。

明らかに、このシステムはよく考え抜かれたものなので、この状況に対する規定が存在すると仮定するしかありません。不適切な場合に、attachment_fu にサムネイルを再生成しないように指示するにはどうすればよいですか?

ありがとう、――まっちゅ

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

4

2 に答える 2

3

attachment_fu を少しハックして、save_attachment?動作を書き直しました。ほとんどの場合、いくつかの新しい条件を追加しました。一時ファイルが存在することに加えて、次のいずれかが満たされている必要があります。

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

3 つのテスト ケース (新しい写真のアップロード、写真画像の編集、画像以外の写真データの編集) にはすべて合格しますが、実際にこれを実際にテストしたことはまだありません。おそらく、いくつかの修正を行う必要があります。何が起こるか見てみましょう。

于 2009-05-27T03:31:46.660 に答える
0

このトピックに関して私が見た唯一の適度に有用なスレッドは次のとおりです。

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

attachment_fu コードを簡単に確認した Matchu のソリューションは、おそらく正しいものだと思います。Matchu が修正した 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

……マッチュが配置した条件を確認する。データが Upload_data= セッター メソッドに渡されたかどうかを判断するエレガントな方法を思いつくことができませんでした (誰かがこれを行うためのより良い方法を持っている場合、私はすべての耳です。私はまだ ruby​​/rails 初心者です)。 ) なので、upload_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

それが役に立てば幸いです。グローバル変数で行ったことを処理するためのよりエレガントな方法があれば、ぜひ聞いてください。

于 2009-07-13T20:31:09.120 に答える