1

私はたくさんの部数があるモデルブックを持っています。

Copy は Book に属し、部数の多い School にも属します。

学校に関連する本を照会し、部数で並べ替えたいのですが、現在の関係でこれを行う方法について少し迷っています。

書籍モデルには、タイトル、著者などのコピーのデータが含まれており、コピーは書籍の物理的な記録のようなものです。

この関係を組織するための助けをいただければ幸いです。

4

2 に答える 2

1
Book.joins(:copies)
    .where("copies.school_id = ?", school_id)
    .order("COUNT(copies.id)")
于 2013-04-10T20:54:06.583 に答える
0

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_idandが必要で、テーブルやテーブルには外部参照があってはならbook_idないと思います。bookschool

于 2013-04-10T21:09:42.593 に答える