1

RoR アプリケーションを取得し、 Carに属するPhotoモデルを持っています。

Photoには、200x200> でサイズ変更された画像が格納されます。

ここで、他の種類の画像を含む別のエンティティをアプリに追加する必要があります ( CarModelクラスとその写真)。

他のモデルとのポリモーフィックな関連付けを介して Photo を使用できればいいのにと思います。しかし、このクラスには別のタイプのサムネイルを使用する必要があるようです (200x200> ではありません)。

私は何をすべきか?

  1. CarModelPhoto クラスを作成し、車のモデルで使用しますか?
  2. Photo が Car.
  3. 写真の画像が 200x200px に制限されないように、その場で画像のサイズを変更するツール (Blitline や Cloudinary など) を使用します。- しかし、私は S3 に画像を保存しています - パフォーマンスが悪いようです。
4

3 に答える 3

2

写真モデルによって継承され、写真のモデルメソッドをオーバーライドする別個のCarPhotoモデルを作成したSTI(単一テーブル継承)を使用します。CarPhotoモデルは同じ写真テーブルを使用します。

class CarPhoto < Photo
  # In this override the photo model methods and validations of you car's photo.
end

これはあなたを助けると思います。

于 2013-03-19T12:07:14.773 に答える
1

2つの画像モデルをどのように実装する必要があるかによって異なりますが、基本的に2つのアプローチがあります

DRY:両方の画像モデルに同様の機能を実装する予定の場合は、自分自身を繰り返して1つのポリモーフィックモデルのみを作成しないでください。

コードを短くする:2つの写真モデルが異なる機能を実装する場合は、コードをクリーンで読みやすく、保守しやすいように、それらを分離することをお勧めします。

そして、あなたは確かにすでに知っていますが、あなたはあなたの幾何学のために異なるスタイルを作成することができます、それであなたが多形の方法を選ぶならあなたはただ異なる名前を見つける必要があるでしょう:thumbnail_car、:thumbnail_car_modelなど

于 2013-03-19T12:05:43.650 に答える
1
  1. 画像を保存する前にサーバー側で画像のサイズを変更するときに入力する長さ幅を指定することにより、 Photoモデルで写真のサイズを指定するルートに進むこともできます。

  2. 画像の 2 つのバージョンを保存します。サムネイルと大きいサイズ。S3 ではより多くのファイルが作成されますが、スペースは安価であり、レンダリングに関してはそれほど集中的ではありません。2 つのサイズを使用することで、サムネイルの解像度が低下して見た目が悪くなってしまうことにも対処できます。

たとえば、モデルを次のように設定できます。

Photo
  name
  file_type

したがって、monkey.pngの場合はPhoto(name: "monkey", file_type: "png") 、画像を希望する大きな形式にサイズ変更し、「monkey_large.png」として保存し、サムネイルを「monkey_thumb.png」として保存します (または、「monkey.png」を保存します)。 2 つの別々のディレクトリlarge/thumb/)。

したがって、表示時に、単純な文字列連結を実行する Photo のメソッドを使用できます (画像を保存するための別のディレクトリ メソッドを使用)。

def image_path_thumbnail
  "#{<s3 path>/thumb/#{image_name}.{image_file_type}"
end

def image_path_large
  "#{<s3 path>/large/#{image_name}.{image_file_type}"
end

また、ファイルのアップロードについては、 PaperClipをご覧ください。それらには S3 統合があり、多数のチュートリアルがオンラインに存在します。

于 2013-03-19T12:14:27.307 に答える