Rails将图像与产品相关联的方式?

时间:2012-11-01 00:27:35

标签: ruby-on-rails associations

我有两个模型ProductImageProduct有两列:namedescriptionImage也有两列:path(即foobar.jpg)和description(字幕和alt信息)。大多数图像描绘了多个产品,每个产品都有多个图像。每个产品都有自己的页面,其中包含所有相关图像的图库。

最初我认为解决这个问题的最佳方法是HABTM协会 - 但我已经读过(在 The Rails 3 Way 中)那些现在不赞成{{ 1}}关联。但是在这里创建第三个模型似乎很愚蠢。

我考虑过的另一个解决方案是,在每个产品页面上,在has_many :through Image列中搜索description Product。但这似乎不是一个优雅的解决方案。

什么是Rails解决这个问题的方法?

1 个答案:

答案 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之间的唯一区别是关系声明和额外模型。是的,额外的模型可能看起来有点矫枉过正,但它并没有减损代码的可维护性。