2013-01-19 244 views
1

我想在rails中使用has_many :through關係來返回一組產品功能。請看這個模型的要點:https://gist.github.com/4572661Rails has_many通過關係

我知道如何使用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']

我以this爲起點。

回答

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 
+0

我意識到我張貼後,我需要做一些事情來實現我想要的東西,你的答案似乎正是我所需要的!我會嘗試你已經提供並明天接受!非常感謝 –

+0

非常感謝馬修,我通過以下方式實現了它:https://gist.github.com/4577958 –