0

2 つのモデルがProductありImageます。Productには と の 2 つの列がnameありdescriptionます。(つまり、foobar.jpg) と(キャプションと情報用)Imageの 2 つの列もあります。ほとんどの画像は複数の製品を表しており、各製品には複数の画像があります。各製品には、関連するすべての画像のギャラリーを備えた独自のページがあります。pathdescriptionalt

当初、私はこれを解決する最善の方法は HABTM アソシエーションになると考えていましたが、( The Rails 3 Wayで) それ以来、それらがアソシエーションを支持して眉をひそめていることを読みましたhas_many :through。しかし、ここで 3 番目のモデルを作成するのはばかげているように思えます。

私が検討した別の解決策は、各製品ページでImage descriptionProduct :name. しかし、これはエレガントな解決策とは思えません。

この問題を解決する Rails の方法は何ですか?

4

1 に答える 1

5

使用has_many :throughはレールの方法ですが、基礎となるデータ構造は同じままにすることができます。私はこのように関係をモデル化します:

class Product
  has_many :product_images
  has_many :images, :through => :product_images
end

class ProductImage
  belongs_to :product
  belongs_to :image
end

class Image
  has_many :product_images
  has_many :products, :through => :product_images
end

つまり、HABTM と HABTM の唯一の違いhas_many :throughは、関係の宣言と追加のモデルです。はい、余分なモデルはやり過ぎのように思えるかもしれませんが、コードの保守性が損なわれることはありません。

于 2012-11-01T00:34:49.053 に答える