列出重复值的数量

我有以下一个Rails ActiveRecord协会,其中一个课程有很多书,书籍属于一个课程。 我想运行一个SQL命令,它会告诉我有多少课程有多本属于该课程的书籍。

例如:第1课有第1册和第2册,我想知道发生了多少次。

#having将允许你做一个#group ,过滤掉只有一本书的课程。

Book.group(:lesson_id).having("count(lesson_id) > 1").count 

Book.group(:lesson_id).count将返回一个哈希,其中lesson_id为关键,书籍数量为值。

您还可以按照4.1.2.3节中的说明实现counter_cache

就像第一个回答所说的那样,计数器缓存或使用组和计数是获得计数的最佳方式。

但是,如果您想要实际输出属于课程的书名而不是仅仅在控制台或视图中计数,您可以执行类似于以下操作的操作:

 Lesson.all.each do |lesson| puts lesson.books.map { |b| b.name }.join(", ") end