【问题标题】:Multiple nested includes in RailsRails 中的多个嵌套包含
【发布时间】:2014-04-29 11:57:41
【问题描述】:

假设我的 Rails 3 应用中有四个模型,组、用户、帖子和评论。关系是:

Groups has_many Users
Users has_many Posts
Posts has_many Comments

(以及所有的belongs_to都在另一个方向)

如何在一个查询中获取属于 group.id 的所有 cmets? 我不能停止考虑使用多个包含()(但到目前为止没有成功),比如

comments = Comment.includes(:Post).includes(:User).includes(:Group).where("groups.id IS ?", group.id)

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    您仍然可以使用包含

    comments = Comment.includes(post: {user: :group}).where('groups.id = ?', group.id)
    

    Rails 4.1指南中查看此topic

    【讨论】:

      【解决方案2】:

      你可以使用eager_load方法:

      comments = Comment.eager_load(post: {user: :group}).where('groups.id = ?', group.id)
      

      您可以在此blog post 中找到有关此类查询的更多信息。

      【讨论】:

      • 这里没有任何理由使用eager_load 而不是includes,它可能会根据条件改变结果。
      • @AndrewMarshall 如何根据条件改变结果?
      • @MarekLipka 但是在 Rails 4 中仍然允许这样做吗?
      • @Pavan 是的,它仍然是允许的。
      • 哎呀,我想我在想preloadincludes 本身也没有被 AFAIK 弃用,只是它的某些用途。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多