0

我有两个模型,ProductImageProduct有两列:namedescriptionImage还有两列:(path即 foobar.jpg)和description(用于标题和alt信息)。大多数图像描绘了多个产品,并且每个产品都有多个图像。每个产品都有自己的页面,其中包含所有相关图像的画廊。

最初我认为解决这个问题的最好方法是建立一个 HABTM 协会——但我已经读过(在Rails 3 Way 中)那些现在不赞成该has_many :through协会的人。但是在这里创建第三种模型似乎很愚蠢。

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

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

4

1 回答 1

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是关系声明和额外模型。是的,额外的模型可能看起来有点矫枉过正,但它不会影响代码的可维护性。

于 2012-11-01T00:34:49.053 回答