我有一本模型书,里面有很多份。
Copy 属于 Book 也属于 School,它有很多份。
我想查询与学校相关的书籍并按份数排序,但我对如何处理当前的关系有点迷茫。
书籍模型包含副本的数据,如标题、作者等,副本就像书籍的物理记录。
对于组织这种关系的任何帮助将不胜感激。
我有一本模型书,里面有很多份。
Copy 属于 Book 也属于 School,它有很多份。
我想查询与学校相关的书籍并按份数排序,但我对如何处理当前的关系有点迷茫。
书籍模型包含副本的数据,如标题、作者等,副本就像书籍的物理记录。
对于组织这种关系的任何帮助将不胜感激。
Book.joins(:copies)
.where("copies.school_id = ?", school_id)
.order("COUNT(copies.id)")
我不敢在 ActiveRecord 中给你一个答案,但下面是 SQL 中可能是一个合理的答案:
SELECT book.name,
school.id,
COUNT(copy.*) number_of_copies
FROM book
JOIN copy on copy.book_id = book.id
JOIN school on copy.school_id = school.id
GROUP BY school.id,
book.name
ORDER BY number_of_copies
这取决于您的表格以某种方式构建。在我看来,学校不会有书籍,而是书籍的副本,所以我认为copy
table 应该有 a school_id
andbook_id
并且book
norschool
表不应该有外国参考。