按模型的belongs_to关系查询和排序

时间:2013-04-10 20:50:03

标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord ruby-on-rails-3.2

我有一本有很多副本的模型书。

副本属于Book,也属于School,有许多副本。

我想查询与学校相关联的书籍,并按副本排序,我对如何使用当前的关系有点迷失。

书籍模型包含副本的数据,如标题,作者等,副本就像书的实际记录。

非常感谢任何组织这种关系的帮助。

2 个答案:

答案 0 :(得分:1)

Book.joins(:copies)
    .where("copies.school_id = ?", school_id)
    .order("COUNT(copies.id)")

答案 1 :(得分: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_idbook_id <{1}}和book表应该有外来引用。