代码之家  ›  专栏  ›  技术社区  ›  Matchu

与AREL(Rails 3)的预加载关联计数

  •  3
  • Matchu  · 技术社区  · 15 年前

    简单任务:考虑到一篇文章有许多评论,可以在一个长的文章列表中显示每篇文章有多少评论。我正在尝试解决如何在AREL中预加载此数据。

    “复杂聚合”部分 README 文件似乎在讨论这种类型的情况,但它并没有确切地提供示例代码,也没有提供在两个查询中而不是一个联合查询中执行此操作的方法,这会降低性能。

    鉴于以下情况:

    class Article
      has_many :comments
    end
    
    class Comment
      belongs_to :article
    end
    

    如何为一篇文章预加载设置每个文章有多少条评论?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Vlad Zloteanu    15 年前

    使用SQL可以做一些不好的事情,比如:

    default_scope :select => 'articles.*, (select count(comments.id) from comments where comments.article_id = articles.id) as count_comments'
    

    然后您可以访问第.first.count条评论。

    另一个更好的方法是使用 belongs_to 协会。

        2
  •  4
  •   user392471    15 年前

    你不能用计数器缓存吗?

    belongs_to :article, :counter_cache => true
    

    您还需要进行迁移,以添加列注释\u计数