按相关has_many模型的计数排序

时间:2014-05-17 02:20:04

标签: ruby-on-rails activerecord

获得以下模型

class Document
  has_many :document_tag_links
  has_many :document_tags, through: :document_tag_links 

class DocumentTag
  has_many :document_tag_links
  has_many :documents, through: :document_tag_links

class DocumentTagLink
  belongs_to :document
  belongs_to :document_tag

现在,我正在尝试按文档标记与它们关联的文档数量进行排序。我尝试了以下内容:

scope :top10, -> {
  joins(:document_tag_links).
  select("documents.*, count(document_id) as documents_count").
  group("document_id").
  order("documents_count desc")
}

但是这给了我以下错误:

 ActiveRecord::StatementInvalid:
   PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "documents"
   LINE 1: SELECT documents.*, count(document_id) AS...
                  ^
   : SELECT documents.*, count(document_id) AS documents_count FROM "document_tags" INNER JOIN "document_tag_links" ON "document_tag_links"."document_tag_id" = "document_tags"."id" GROUP BY document_id  ORDER BY documents_count desc

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

在评论中讨论后的解决方案。

scope :top10, -> {
  joins(:document_tag_links)
  .select("document_tags.*, count(document_id) as documents_count")
  .group("document_tags_id")
  .order("documents_count desc") }
相关问题