Ruby on rails 按关联模型的计数排序

Ruby on rails 按关联模型的计数排序,ruby-on-rails,activerecord,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 :do

有以下型号

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

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

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

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

您试图从documents表中获取列,但没有“from documents”子句,因为您正在DocumentTag上设置作用域,该作用域创建了“from document_tags”。联接不应该处理这个问题吗?我怎样才能让它工作呢?你只是加入了文档标签和文档标签链接。为什么您需要文档。*无论如何,您正在尝试获取标签和每个标签的计数。很高兴听到,您添加了一个答案。如何在表上添加计数器缓存并按计数排序?这样您就不必连接表和编写复杂的查询。