rails命令由has_many计算资源

时间:2014-04-03 08:17:09

标签: sql ruby-on-rails

我有模特作者,书籍

作者:

has_many :books, as: :resource, class_name: "Book"

图书:

Book(id: integer, resource_id: integer, resource_type: string, created_at: datetime, updated_at: datetime) 

对于作者,resource_id将是作者ID,resource_type将是“作者”。

因此,author_instance.books将返还书籍。

我尝试使用How to sort authors by their book count with ActiveRecord?中的counter_cache,但其返回错误“books_count”不可用。

即使这样也无效:

Author.joins(:books).order("(select count(*) from books) DESC").distinct

那么,如何让作者按照书籍排序。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用SQL alias填充books_count属性:

Author.joins(:books).select("authors.*, count(books.*) as books_count").order(books_count: :desc).distinct

您可以使用此RailsCast

查看其工作原理