2016-01-20 131 views
0

我有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") 

它不加入这两个表。

任何帮助将不胜感激

+0

哪些SQL没有按它会产生吗? – fengd

+0

你是否收到错误信息?如果有,你可以分享吗? –

+4

只是一个评论,Rails默认使用内部连接,所以你可以做Engagement.joins(:user) –

回答

0

您的查询是正确的。 您正在进行内部连接,并且只返回与用户有关系的约会。

要返回用户数据,你应该这样做: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

0

试试这个Engagement.joins(:users)

它应该工作。

+0

@giovani上面的查询也不会提取用户数据。它给了我相同的结果,我在问题 – Euler