【问题标题】:Rails ActiveRecord Includes with Inner JoinRails ActiveRecord 包含内部连接
【发布时间】:2016-12-06 20:01:57
【问题描述】:

在 ActiveRecord 模型上使用 includes 时,是否有更好的方法来指定内部连接:

User.includes(:address).joins(:address)

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

【问题讨论】:

  • 为什么你需要同时调用这两个?您不应该需要包含和连接,对吗?您只想要有地址的记录吗? joins 应该给你。即使没有地址关联,您是否想要所有用户? includes 应该给你那些。
  • 另外,如果您需要更具体地了解连接,您可以提供一段 SQL。但是你不需要它只是INNER JOIN,它是joins 的自然输出。这是有关该主题的文档:apidock.com/rails/ActiveRecord/QueryMethods/joins
  • :includes 将预加载或急切加载关联,但 :joins 不会。所以如果你想加载关联并指定一个内部连接,那是我想出的最好的解决方案——只是代码不是很漂亮。

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


【解决方案1】:

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

  • 如果你想用内部连接关联加入地址表,你 应该使用 join()
  • 如果你想预加载你应该使用的数据 include() 或 eager_load()。我个人更喜欢 eager_load() 函数, 因为它保证左连接将被使用。包括() 可能会决定使用单独的查询而不是左连接关联
  • 如果您想使用内连接并预加载您刚刚合并的数据 在你的情况下这两种方法

【讨论】:

  • 正如我在问题中所说,它有效,只是不是很漂亮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多