如何构建RoR联接

时间:2013-06-18 04:13:14

标签: ruby-on-rails

如何在RoR中形成以下SQL查询?

在SQL中我会做这样的事情:

SELECT * FROM Gifts G
JOIN Payments P ON P.id = G.payment_id
JOIN Users    U ON U.id = P.user_id
WHERE G.type = 0

我有三种型号 - 用户,付款和礼品。

模式如下所示:

Users has many Payments
Payments has many Gifts

Users

# Table name: users
# id      :integer          not null, primary key
# name    :string

Payments

# Table name: payments
#
#  id          :integer          not null, primary key
#  user_id     :integer
#  status      :integer

Gifts

# Table name: gifts
#
#  id         :integer              not null, primary key
#  payment_id :integer
#  name       :string
#  type       :integer

3 个答案:

答案 0 :(得分:1)

您是否在模型中使用了has_many关键字?您可以使用活动记录设置模型,直接为您进行连接!

答案 1 :(得分:0)

您可以尝试:

Gifts.find_by_sql("SELECT * FROM Gifts G
                  JOIN Payments P ON P.id = G.payment_id
                  JOIN Users    U ON U.id = P.user_id
                  WHERE G.type = 0")

对于ActiveRecord,它可以提供帮助。 Check it out

答案 2 :(得分:0)

首先,您需要定义模型之间的关联,

用户 has_many:用户

付款 belongs_to:用户 has_many:礼物

礼品 belongs_to:付款

现在您已经建立了关联,您可以使用一些AR(Active Record)来检索数据。感谢rails,你可以使用eager loding"机制来加载Model"返回的对象的相关记录。这就是魔术开始的地方。

以免您认为需要从用户那里找到他们所有的礼物。首先,您需要与他们的付款相关,最后您可以访问他们的礼物。所有这些使用急切加载。 user = User.find(1) user_gifts = user.payments.gifts

我还没有测试过代码,但我希望这会有所帮助。