我有两种模型用户发布,其中:user has_many :posts
我如何找到具有更多n帖子的用户列表?

我在寻找像where这样的简单语句,而不是使用范围。

最佳答案

where查询不允许内部使用诸如count之类的聚合函数,解决此问题的理想方法是使用having方法。

User.joins(:posts).group('users.id').having('COUNT(*) >= ?', n)

这将被映射到
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" GROUP BY users.id HAVING COUNT(*) >= n

通过在Post Model中使用计数器缓存并将计数保持为用户表上的posts_count列,还有另一种更容易的方法。
belongs_to :user, counter_cache:true
User.where('posts_count > ?', n)

但是我更喜欢第一种方法,因为它不涉及任何数据库更改,而且非常简单

关于ruby-on-rails - 在Rails中查找具有多个外键值的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35334289/

10-15 19:38