我正努力实现这一目标
我有三个模特,
现在,假设我想找到和排序所有用户谁已经提交了一个类别中的大多数帖子,我如何实现这一点。
例如:对于“时尚”这一类别,我想用时尚的用户帖子数量来获取和订购用户。
期望的结果应该是,
注意:更喜欢与postgres兼容的解决方案。
发布于 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 )中,(我认为)将根据每个用户在指定类别中的帖子数量给出有序的用户关系:
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。
此答案基于堆栈溢出多关系案例。
https://stackoverflow.com/questions/70630213
复制相似问题