Ruby on Rails Active Record内部连接无法正常工作

时间:2016-01-20 15:35:01

标签: sql ruby-on-rails activerecord ruby-on-rails-3.1

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

它没有加入两个表格。

任何帮助将不胜感激

2 个答案:

答案 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)

它应该有用。