Ruby on Rails活动记录内部连接不工作
问题描述:
我有2个模型:订婚,用户。参与基本上是指用户预订的项目。每次参与都是针对特定用户的。用户参与有一个外键。我想加入与用户的接触,以便我可以看到用户的详细信息。Ruby on Rails活动记录内部连接不工作
这里是我的模型
class Engagement < ActiveRecord::Base
belongs_to :food_item
belongs_to :user
end
class User < ActiveRecord::Base
has_many :engagements
has_many :food_item, through: :engagements
end
我运行下面的查询:
Engagement.joins("INNER JOIN users ON users.id = engagements.user_id")
它不加入这两个表。
任何帮助将不胜感激
答
您的查询是正确的。 您正在进行内部连接,并且只返回与用户有关系的约会。
要返回用户数据,你应该这样做:Engagement.select('tasks.*, users.*').joins(:user)
。这样该对象将具有参与和用户属性。但这不是Rails的方式。
“正确” 的方法是:
engagements = Engagement.includes(:user)
engagements.first.user # this will return the user data
这样,你得到所有雇用和预加载用户数据,这种方式避免了N + 1个查询(Eager-loading);)
+0
提到的查询嗨亚历克斯感谢您的答复,将尝试和更新 – Euler
哪些SQL没有按它会产生吗? – fengd
你是否收到错误信息?如果有,你可以分享吗? –
只是一个评论,Rails默认使用内部连接,所以你可以做Engagement.joins(:user) –