0

画像が関連付けられている必要がある 3 つのモデルがあります。

Program.rb
Episode.rb
Gallery.rb

それらのいずれも、異なる画像サイズを持つ必要があります。例えば:

Program -> 100x100 , 250x400 , 500x400
Episode -> 222x450 , 210x330 , 1000x1200
Gallery -> 100x100 , 500x400 , 1000x1200

まず、モデル(Paperclip のヘルパー) のpolymorphic関連付けで十分だと思いました。ちょうどこのような:Picturehas_attached_file

class Picture < ActiveRecord::Base

has_many :imageable, :polypmorphic=> :true
has_attached_file :image, :styles => {... :program1 => "100x100>", :program2 => "250x400>", :episode1=>"222x450" , :episode2=>"210x330" , :gallery1=>"100x100" , :gallery2=>"500x400" ....  }
# There are almost 10 different styles for different models...
end

このようにして、次のように画像を使用できます。

@program.pictures.first.image[:program1]
@episode.pictures.second.image[:episode2]
..
.

でも効率悪いと思いませんか?それは...ですか?

この種のニーズに対処するための最善の戦略は何ですか?

関連付けと Paperclip を構築するにはどうすればよいですか?

例えばクリップは機種ごとにセットした方が良いのでしょうか?

1 つのテーブル内にすべての画像を収集するのは良い方法だと思いましたか?

どう思いますか?

これは実際によくある質問ですか?ではない?

ありがとうございました

4

1 に答える 1

0

個人的には、すべてがまったく同じ次元を必要としない限り、ポリモーフィック モデルにアタッチメントを付けることはありません。それでも、私はおそらくそうしないでしょう。ただし、すべての画像を 1 つのテーブルに配置する必要があるというビジネス ニーズがあるため、選択肢が異なる場合があります。

しかし、あなたの場合、それはそのようには聞こえません。私は間違いなくあなたの添付ファイルを指定されたモデルに直接置きます. 添付ファイルに必要なのは 1 列だけです (ただし、それ以上の列を作成することもできます)。そして、あなたのImageableクラスは何をしていますか?動作ではなく、実際にはデータを保持するだけです (動作は実際には Paperclip 内にあり、ビジネス ロジックよりも持続性に関連しているため、AR のように扱う必要があります)。

最後に、1 つの画像をEpisodeモデルにアップロードするには、さらに 9 回の変換が必要になります。つまり、他に 9 回の の呼び出しとconvert、9 回の追加のファイル保存 (ネットワーク ストレージの場合はかなり遅い) がすべて要求中に発生する必要があり、ユーザーを待たせます。

于 2013-08-21T17:35:53.223 に答える