我试图在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