:加入|将行为内部联接更改为左联接

时间:2012-09-19 13:49:29

标签: ruby-on-rails ruby activerecord left-join

我有两个表''user'和'lms_users'

class LmsUser
    belongs_to :user
end

class User
    has_one :lms_user
end

当我写User.all(:joins => :lms_user)时,它会使用内部联接连接表格。

我想要左连接。怎么能改变这种行为? (我不想使用SQL命令,只有Ruby语法。)

我该如何处理?

3 个答案:

答案 0 :(得分:0)

:joins => "LEFT JOIN lms_users ON lms_users.user_id = users.id"

答案 1 :(得分:0)

您可以使用includes在没有SQL的情况下拉出LEFT JOIN,但前提是您指定了包含连接表中列的其他约束(或仅仅是order子句)。所以,

User.includes(:lms_user).all

不会生成LEFT JOIN(而是生成两个单独的查询),但

User.includes(:lms_user).where(:lms_user => {:role => 'admin'}).all

那样。

关于此的更多信息

答案 2 :(得分:0)

User.left_outer_joins(:lms_user)(如果您在5岁以上)