首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Rails][Postgres]如何按类别中的大多数帖子为用户排序?

[Rails][Postgres]如何按类别中的大多数帖子为用户排序?
EN

Stack Overflow用户
提问于 2022-01-08 06:53:26
回答 1查看 53关注 0票数 1

我正努力实现这一目标

我有三个模特,

  • 用户(has_many :posts)
  • 帖子(Belongs_to :user,HABTM :类别)
  • 职类(HABTM :员额)

现在,假设我想找到和排序所有用户谁已经提交了一个类别中的大多数帖子,我如何实现这一点。

例如:对于“时尚”这一类别,我想用时尚的用户帖子数量来获取和订购用户。

期望的结果应该是,

  • 马克(7个时装界职位)
  • 戴夫(5个时装界职位)
  • 卡拉(时装界的4个职位)。等等

注意:更喜欢与postgres兼容的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-08 19:52:15

首先,我认为在这种情况下,为了您的目的(或者几乎任何目的)建立has_and_belongs_to_many关系是不合适的(或者至少不方便)。您应该使用has_many :through代替。

为什么?因为has_and_belongs_to_many的设计并不是为了达到最基本的目标,比如你想要做的事情。要获得更深入的理由(为什么您应该在几乎任何多到多的关系中使用has_many :through ),请参阅Flatiron的"许多关系“和开发简化版的"许多”。作为您的参考,克里斯蒂安·罗尔的"许多:通过“可能会有所帮助,这将为您提供一个迁移指南。

现在,假设您已经将模型迁移到"has_many : your“。然后,在Rails 5+ (它支持left_joins )中,(我认为)将根据每个用户在指定类别中的帖子数量给出有序的用户关系:

代码语言:javascript
复制
User.left_joins(:posts).
     left_joins(posts: :post_category_joins).
     where('post_category_joins.category_id = ?', YOUR_CHOSEN_CATEGORY_ID).
     group(:id).
     order('COUNT(post_category_joins.post_id) DESC')

其中,post_category_joins是您选择的连接表名称,在Post和YOUR_CHOSEN_CATEGORY_ID之间,YOUR_CHOSEN_CATEGORY_ID是指定类别的类别ID。

此答案基于堆栈溢出多关系案例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70630213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档