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”。联接不应该处理这个问题吗?我怎样才能让它工作呢?你只是加入了文档标签和文档标签链接。为什么您需要文档。*无论如何,您正在尝试获取标签和每个标签的计数。很高兴听到,您添加了一个答案。如何在表上添加计数器缓存并按计数排序?这样您就不必连接表和编写复杂的查询。