Rails get count of association through join table

后端 未结 2 618
我寻月下人不归
我寻月下人不归 2020-12-30 08:53

This question is an offshoot from HABTM associations in Rails : collecting and counting the categories of a model's children.

Given:

class Cate         


        
2条回答
  •  醉酒成梦
    2020-12-30 09:46

    You'll want to be creating a method (or scope) on the Categories object so something like.

    Category.joins(:books).select('categories.*, COUNT(books.id) as book_count').group('categories.id')
    

    the resulting object will now have every attribute of an instance of category and respond to a method, book_count which returns the number of books with that instances category id. Its noteworthy to mention this will omit any categories that do not have books associated with them. if you want to include those, the query needs to be updated to the following:

    Category.joins('LEFT OUTER JOIN books_categories on books_categories.category_id = categories.id').select('categories.*, COUNT(books_categories.book_id) as book_count').group('categories.id')
    

提交回复
热议问题