2011-04-26 52 views
0

我正在開發一個關於Rails 3中禮品列表的Web應用程序。我想要獲得某個列表的所有購買信息。這些模型和它們之間的關係:如何構建以下查詢

class Gift < ActiveRecord::Base 
    belongs_to :list 
    has_many :purchases 

class List < ActiveRecord::Base 
    has_many :gifts 

class Purchase < ActiveRecord::Base 
    belongs_to :gift 

所以,基本上,我已經試過下面的代碼(我不認爲這是做這在所有的最好方式),並eventhough結果是正確的,我意識到,我得到一個Gift對象,而不是一個Purchase

@purchases = List.find(params[:id]).gifts.joins(:purchases).select("purchases.*") 

任何想法?

回答

2
@purchases = List.find(params[:id]). 
        gifts.joins(:purchases). 
        map(&:purchases).flatten 

或只是重構你的模型:

class List < ActiveRecord::Base 
    has_many :gifts 
    has_many :purchases, :through => :gifts 

所以

List.find(params[:id]).purchases 
+0

這就是我一直在尋找的重構!我已將:購買關係添加到列表模型。 – 2011-04-26 20:13:24

1

如果你想把所有的採購也許......

@purchases= List.find(params[:id]).gifts.collect{|g| g.purchases} 

雖然你可能需要將其拆分,確認List.find返回一個有效的列表。

+0

雖然我更喜歡@ fl00r回答 – 2011-04-26 20:09:58