我有一个图书 ID 数组,我需要对每个图书 ID 进行迭代,并将每个图书的评论数保存在一个散列 (@book_comments) 中,该散列将以 book_id 作为键,将该书的评论数作为值.书有很多评论,评论属于书。
@book_ids.map {|id| @book_comments[id] = Book.find(id).comments.size}
这将通过这两个查询访问数据库,以获取我在数组中拥有的 ID 数量。
SELECT `books`.* FROM `books` WHERE `books`.`id` = ? LIMIT 1
SELECT COUNT(*) FROM `comments` WHERE `comments`.`book_id` = ?
肯定有更好的方法。 如果你知道,请教我。 谢谢。
请您参考如下方法:
这应该得到你的散列:
@book_comments = Comment.where(book_id: @book_ids).group(:book_id).count