0

我将如何在 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
4

3 回答 3

1

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

于 2013-06-18T04:25:18.757 回答
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,它可能会有所帮助。检查出来

于 2013-06-18T04:27:39.790 回答
0

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

用户 has_many :users

付款 belongs_to :user has_many :gifts

礼物belongs_to:付款

现在您已经建立了关联,您可以使用一些 AR(Active Record)来检索数据。多亏了rails,您可以使用eager loding“加载模型返回的对象的关联记录的机制”。这里是魔术开始的地方。

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

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

于 2013-06-18T04:33:48.177 回答