Die Abfrage where
erlaubt keine Aggregatfunktionen wie zählen darin, die ideale Methode, um dieses Problem anzugehen ist die having
Methode.
User.joins(:posts).group('users.id').having('COUNT(*) >= ?', n)
Dies wird zu
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" GROUP BY users.id HAVING COUNT(*) >= n
abgebildet werden Es gibt eine andere Methode möglich, die unter Verwendung Zähler Cache innerhalb des Post Modell und halten die Zählung als posts_count Spalte auf der Benutzertabelle einfacher ist.
belongs_to :user, counter_cache:true
User.where('posts_count > ?', n)
Aber ich ziehe die erste Methode, da es keine DB Änderungen mit sich bringt und ist ziemlich geradlinig