【问题标题】:Rails includes nested relationsRails 包含嵌套关系
【发布时间】:2011-12-18 20:17:17
【问题描述】:

我需要查询特定用户的所有帖子,并包括所有cmet和属于该评论的用户。

class User < ...
  has_many :posts
  has_many :comments
end

class Post < ...
  belongs_to :user
  has_many :comments
end

class Comment < ...
  belongs_to :user
  belongs_to :post
end

@posts = current_user.posts.include(:comments)

是否可以同时获得评论用户?我列出了很多帖子和cmets。我不想查询每个评论用户。

谢谢/托拜厄斯

【问题讨论】:

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


    【解决方案1】:

    试试

    @posts = current_user.posts.includes( :comments => :user)
    

    阅读更多关于它的信息here

    【讨论】:

    • 是否可以限制此查询中的评论。我只希望包含 5 个最新的 cmets。如果我循环 say.cmets.limit(5) 会运行一个新查询
    • 在我的回答中:Post has_many :comments, :include =&gt; [:user], :limit =&gt; 5
    • 是的,但我也不想在一页上获取所有 cmets,甚至对它们进行分页?
    • 有人知道这在 Rails 4 和 5 中是如何改变的吗?我找不到任何关于这种变化的信息,我被困在这个问题上,将我的应用程序从 3.2 升级到 5.0
    • Includes 在 rails 4 中的工作方式相同,我认为在 5 中也是如此
    【解决方案2】:

    在关系定义语句中包含如何?

    :包括
    指定在加载此对象时应立即加载的二阶关联。

    class Post <
      belongs_to :user
      has_many :comments, :include => [:user], :limit => 5
    end
    

    【讨论】:

    • 看起来 :include 不是一个有效的选项(至少在 Rails 4.1 中不是),有替代方案吗?
    猜你喜欢
    • 2021-05-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多