在构建包含三个关联模型的rails查询时遇到问题

时间:2013-05-02 23:12:01

标签: ruby-on-rails ruby activerecord

我正在使用三种模式: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的属性。

我想找到用户'你'在investment.deal.funding_type_id == 3

所做的所有投资

或者更清楚:投资是由用户进行的交易。我是用户'你'对资金类型id为3的交易所做的投资。

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

1 个答案:

答案 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 :throughUser之间设置了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)