Ruby 在 Rails 上 Active Record 内部联接不起作用
Ruby on Rails Active Record inner join not working
我有 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")
它没有连接两个表。
任何帮助将不胜感激
试试这个 Engagement.joins(:users)
应该可以。
你的问题是正确的。
您正在进行内部联接,并且仅 returning 与用户相关的参与。
要 return 用户数据,您应该这样做:Engagement.select('tasks.*, users.*').joins(:user)
。这样,对象将具有参与度和用户属性。但这不是 Rails 方式。
"correct"方式是:
engagements = Engagement.includes(:user)
engagements.first.user # this will return the user data
通过这种方式,您可以获取所有参与度并预加载用户数据,从而避免 n + 1 次查询 (Eager-loading) ;)
我有 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")
它没有连接两个表。
任何帮助将不胜感激
试试这个 Engagement.joins(:users)
应该可以。
你的问题是正确的。 您正在进行内部联接,并且仅 returning 与用户相关的参与。
要 return 用户数据,您应该这样做:Engagement.select('tasks.*, users.*').joins(:user)
。这样,对象将具有参与度和用户属性。但这不是 Rails 方式。
"correct"方式是:
engagements = Engagement.includes(:user)
engagements.first.user # this will return the user data
通过这种方式,您可以获取所有参与度并预加载用户数据,从而避免 n + 1 次查询 (Eager-loading) ;)