Rails has_many through relation



我试图在rails中使用has_many :through关系来返回一组产品特性。请查看模型的要点:https://gist.github.com/4572661

我知道如何使用ProductFeature模型直接做到这一点,但我真的不想与它直接交互。

我希望能够这样做:

features = Product.features

返回:

[id: 1, name: 'Colour', value: 'Blue'], [id: 2, name: 'Size', value: 'M'], [id: 3, name: 'Shape', value: 'Round']

但是我只能让它返回:

[id: 1, name: 'Colour'], [id: 2, name: 'Size'], [id: 3, name: 'Shape']

has_many :through被设计为将join table视为仅此而已。

连接上的任何列都将从关联中被忽略。

因此我们必须使用product_features

product.product_features(include: :feature)
因此我们可以说
product.product_features(include: :feature).each do |pf|
  feature = pf.feature
  name = feature.name
  value = pf.value
end

如果你经常使用这种类型的东西,我倾向于这样做;

class Product
  # always eager load the feature
  has_many :product_features, include: :feature
end
class ProductFeature
  # delegate the feature_name
  delegate :name, to: :feature
end

相关内容

  • 没有找到相关文章

最新更新