我有两种模型用户和发布,其中: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/