繁体   English   中英

通过has_many关联的计数进行排序

[英]Order by count of a has_many association

我的模型是:

service_provider有_很多问题,问题属于_到service_provider

在Activeadmin中,我想索引我的service_providers并按他们的questions_count对其进行排序。

因此,要获取一个字段,我可以进行排序,如下定义我的default_scope:

scope "all", :default => true do |sp|
  sp.joins("LEFT JOIN questions on questions.service_provider_id = service_providers.id")
    .select("service_providers.*, COUNT(service_provider_id) as questions_count")
    .group("service_providers.id")
end

我的列定义如下所示:

column :questions, :sortable => "questions_count" do |sp|
  sp.questions_count
end

在索引我的服务提供者时,一切看起来都很好。 但是,当我按他们的questions_count进行查询时,会出现以下错误:

 SQLite3::SQLException: no such column: service_providers.questions_count: SELECT  service_providers.*, COUNT(service_provider_id) as questions_count FROM "service_providers" LEFT JOIN questions on questions.service_provider_id = service_providers.id GROUP BY service_providers.id ORDER BY "service_providers"."questions_count" desc LIMIT 30 OFFSET 0

因此,他尝试按“ service_providers”。“ questions_count” desc命令排序。 实际上,他应该按“ questions_count” desc排序。

有什么建议,我如何告诉他在他的订单陈述中使用正确的字段名?

它应该是

ServiceProvider.joins(:questions).group("service_providers.id").order("count(service_providers.id) DESC")
.order("COUNT(service_provider_id)")

要不就

.order("questions_count")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM