0

私のモデルは次のとおりです。

service_provider has_many question、質問は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

サービスプロバイダーのインデックスを作成すると、すべて問題ないように見えます。しかし、質問数で注文すると、次のエラーが表示されます。

 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 で ORDER BY しようとします。実際、彼は "questions_count" desc で ORDER BY する必要があります。

注文ステートメントで正しいフィールド名を使用するように彼に伝えるにはどうすればよいですか?

4

2 に答える 2

1

そのはず

ServiceProvider.joins(:questions).group("service_providers.id").order("count(service_providers.id) DESC")
于 2015-11-10T04:58:22.787 に答える
0
.order("COUNT(service_provider_id)")

あるいは単に

.order("questions_count")
于 2012-10-18T09:48:14.623 に答える