如何在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
答案 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
我还没有测试过代码,但我希望这会有所帮助。