我有两个表 'users' 和 'lms_users'
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
当我编写 User.all(:joins => :lms_user)
时,它使用 Inner join 连接表。
我想要一个左连接。如何改变这种行为? (我不想使用 SQL 命令,只使用 Ruby 语法。)
我该如何处理?
最佳答案
您可以在没有 SQL 的情况下使用 includes
实现 LEFT JOIN,但前提是您指定了涉及连接表中的列的附加约束(或仅仅是一个 order
子句) (s).所以,
User.includes(:lms_user).all
不会生成 LEFT JOIN(而是生成两个单独的查询),但是
User.includes(:lms_user).where(:lms_user => {:role => 'admin'}).all
会。
关于此的更多信息
关于ruby-on-rails - :joins | change behavior inner join to left join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496165/