1

我正在尝试使用has_many :throughrails 中的关系来返回一组产品功能。请参阅此模型的要点: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']

以此为起点。

4

1 回答 1

1

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
于 2013-01-19T16:56:50.227 回答