2013-05-02 85 views
1

我有三個與之一起工作的模型:UserDealInvestment在構建包含三個關聯模型的rails查詢時遇到問題

用戶

User has many :deals 
User has many :investments 

新政

Deal has many :investments 
Deal belongs to :user 

投資

Investment belongs to :user 
Investment belongs to :deal 

(這是唯一的關聯I H在這些模型之間建立的大街)

可以說我有一個用戶記錄「u」,Deal有一個屬性叫做funding_type_id

我想查找用戶'u'所做的所有投資,其中investment.deal.funding_type_id == 3

或者更清楚:投資是由用戶進行的交易。我是用戶'u'對資助類型ID爲3的交易進行的一系列投資。

我之前發佈了這個,但沒有收到任何成功的回覆。自那以後,我自己做了幾次嘗試,但都遇到了失敗,所以我回到了SO。希望我明確解釋我的問題。謝謝!

回答

5

編輯:我的壞,誤解的問題 - 清晨深夜:)

後試試這個:

investments = Investments.joins(:deal).where(user_id: u.id, deals: { funding_type_id: 3 }) 

這應該生成的SQL語句(在1頂替u.id):

SELECT "investments".* FROM "investments" 
    INNER JOIN "deals" ON "deals"."id" = "investments"."deal_id" 
    WHERE "investments"."id" = 1 AND "deals"."funding_type_id" = 3 

哪應該給你想要的行。


如果你設置了一個has_many :through協會(見Association Basics guide)之間UserDeal,您可以直接訪問所有屬於用戶的交易:

# user.rb 
has_many :deals, through: :investments 

然後,您可以得到所有的交易對於特定用戶使用:

user_deals = User.deals 

您可以選擇將where條件放在該條件上以您想要的方式限制它。其中u是用戶想要的交易:

deals = u.deals.where(funding_type_id: 3) 
+0

+1,但任何想法什麼樣的SQL創建與此? – baash05 2013-05-02 23:26:37

+0

也許我不清楚我的問題。我對獲得交易不感興趣,我只想要投資。投資是由用戶進行的交易。我是用戶'u'對資金類型ID爲3的交易進行的一系列投資。 – xxyyxx 2013-05-02 23:42:51

+0

*我希望用戶'u'對資助類型ID爲3的交易進行的投資集合。 – xxyyxx 2013-05-02 23:53:59