Rails ActiveRecord包含内部联接

Tom*_*ssi 6 activerecord ruby-on-rails rails-activerecord

includesActiveRecord模型上使用时,是否有更好的方法指定内部联接,则:

User.includes(:address).joins(:address)
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种更漂亮的方法来指定何时需要内部联接和包含?

小智 9

正如 Tom Rossi 在您问题的评论部分所解释的那样。

  • 如果要使用内部联接关联加入地址表,则应使用 join()
  • 如果你想预加载数据,你应该使用 include() 或aging_load()。我个人更喜欢eager_load() 函数,因为它保证了left join 会被使用。include() 可能决定使用单独的查询而不是左连接关联
  • 如果您想使用内部连接并预加载数据,您只需将两种方法结合起来就可以了

  • 正如我在问题中所说,它有效,只是不是很漂亮。 (3认同)