1

我正在使用三个模型:UserDealInvestment

用户

User has many :deals
User has many :investments

交易

Deal has many :investments
Deal belongs to :user

投资

Investment belongs to :user
Investment belongs to :deal 

(这些是我在这些模型之间建立的唯一关联)

假设我有一个用户记录 'u',而 Deal 有一个名为 的属性funding_type_id

我想找到用户 'u' 所做的所有投资,其中investment.deal.funding_type_id == 3.

或者更清楚地说:投资是由用户对交易进行的。我是用户 'u' 对资金类型 id 为 3 的交易进行的一组投资。

我前段时间发布了这个,但没有收到任何成功的回复。从那以后,我自己做了几次尝试,但都失败了,所以我回到了 SO。希望我清楚地解释了我的问题。谢谢!

4

1 回答 1

5

编辑:我不好,误读了这个问题——深夜过后的清晨:)

试试这个:

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

这应该会生成以下 SQL(替换1为 for 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关联(请参阅关联基础指南),您可以直接访问属于用户的所有交易:UserDeal

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

然后,您可以使用以下方式获得特定用户的所有交易:

user_deals = User.deals

您可以选择在其上设置一个where条件以按照您想要的方式限制它。u您想要交易的用户在哪里:

deals = u.deals.where(funding_type_id: 3)
于 2013-05-02T23:18:57.673 回答