私はたくさんの部数があるモデルブックを持っています。
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
テーブルにはschool_id
andが必要で、テーブルやテーブルには外部参照があってはならbook_id
ないと思います。book
school