我有两个模型Product
和Image
。 Product
有两列:name
和description
。Image
也有两列:path
(即foobar.jpg)和description
(字幕和alt
信息)。大多数图像描绘了多个产品,每个产品都有多个图像。每个产品都有自己的页面,其中包含所有相关图像的图库。
最初我认为解决这个问题的最佳方法是HABTM协会 - 但我已经读过(在 The Rails 3 Way 中)那些现在不赞成{{ 1}}关联。但是在这里创建第三个模型似乎很愚蠢。
我考虑过的另一个解决方案是,在每个产品页面上,在has_many :through
Image
列中搜索description
Product
。但这似乎不是一个优雅的解决方案。
什么是Rails解决这个问题的方法?
答案 0 :(得分:5)
使用has_many :through
将是rails方式,但底层数据结构仍然可以是相同的。我会用这种方式建立关系模型:
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和has_many :through
之间的唯一区别是关系声明和额外模型。是的,额外的模型可能看起来有点矫枉过正,但它并没有减损代码的可维护性。