我有2个型号:订婚,用户。参与基本上是指用户预订的项目。每次约定都是针对特定用户的。订婚用户有外键。我想加入与用户的互动,以便我可以看到用户的详细信息。
以下是我的模特
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 :(得分:2)
您的查询是对的。 您正在进行内部联接,只返回与用户有关系的约会。
要返回用户数据,您应该执行以下操作:Engagement.select('tasks.*, users.*').joins(:user)
。这样,对象将具有参与和用户属性。但这不是Rails方式。
“正确”的方式是:
engagements = Engagement.includes(:user)
engagements.first.user # this will return the user data
通过这种方式,您可以获得所有约定并预加载用户数据,从而避免了n + 1次查询(Eager-loading);)
答案 1 :(得分:0)
试试这个Engagement.joins(:users)
它应该有用。