我正在使用三种模式:User
,Deal
和Investment
。
用户
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
的属性。
我想找到用户'你'在investment.deal.funding_type_id == 3
。
或者更清楚:投资是由用户进行的交易。我是用户'你'对资金类型id为3的交易所做的投资。
我前一段时间发布了此消息,但没有收到任何成功的回复。从那以后我自己做了几次尝试,但都失败了,所以我又回到了原点。希望我能清楚地解释我的问题。谢谢!
答案 0 :(得分: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
和User
之间设置了Deal
关联(请参阅Association Basics guide),则可以直接访问属于用户的所有优惠:
# user.rb
has_many :deals, through: :investments
然后,您可以使用以下方式获取特定用户的所有交易:
user_deals = User.deals
您可以选择在其上设置where
条件,以便按照您的需要进行限制。 u
是您想要交易的用户:
deals = u.deals.where(funding_type_id: 3)