ruby-on-rails - :joins | change behavior inner join to left join

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

我有两个表 '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/

相关文章:

ruby - 如何指定 gem 对 UNIX 程序的依赖关系,例如fmt 还是整洁?

jquery - 如何在Rails中使用下拉菜单和ajax过滤数据

html - Rails 3 不将 HTML 呈现为标记

ruby - ActiveRecord 值是字符串类型数字的列的平均值

ruby-on-rails - 我们可以在没有 SendGrid 附加组件的情况下将 smtp 与 heroku 一起使用吗?

ruby-on-rails - rails 如何在调用 ajax 删除表行后删除它?

ruby-on-rails - 了解 `include` mixin 模块的 "subsequent"语句行为

ruby-on-rails - 在 Ruby on Rails 中,render 'shared/score' , :locals => { :score => @foo. score } 会不会在本地通过?

python - 非阻塞主机名解析?

python - 我需要像 scapy 这样强大的交互式数据包操作程序