我有两个表“用户”和“lms_users”
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
当我写它时,它使用Inner joinUser.all(:joins => :lms_user)
连接表。
我想要一个左连接。如何改变这种行为?(我不想使用 SQL 命令,只使用 Ruby 语法。)
我该如何处理?
我有两个表“用户”和“lms_users”
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
当我写它时,它使用Inner joinUser.all(:joins => :lms_user)
连接表。
我想要一个左连接。如何改变这种行为?(我不想使用 SQL 命令,只使用 Ruby 语法。)
我该如何处理?
:joins => "LEFT JOIN lms_users ON lms_users.user_id = users.id"
您可以在没有 SQL 的情况下使用 LEFT JOIN includes
,但前提是您指定了order
涉及联接表中的列的附加约束(或仅是一个子句)。所以,
User.includes(:lms_user).all
不会生成 LEFT JOIN(而是两个单独的查询),但是
User.includes(:lms_user).where(:lms_user => {:role => 'admin'}).all
将。
更多关于这个
User.left_outer_joins(:lms_user)
如果你在轨道上 5+