2016-05-13 8 views
1

私のテンプレートとは別のものを数える方法があるのだろうか、私はgroup_by(&:product_id)を使ってみました。以下のコードは私にあなたがクエリselectコールにDISTINCT COUNTを指定する必要があり、カウントが、ユニークではありませんhamlテンプレート内で別個にカウントする

- @suppliers.each do |supplier| 
     %tr 
      %td.mdl-data-table__cell--non-numeric= link_to supplier.name, edit_admin_supplier_path(supplier) 
      %td.mdl-data-table__cell--non-numeric= supplier.variants.product.count 
+0

可能であれば、ビュー内で照会しないでください。また、これはn + 1の厄介なクエリを提供します。 – max

+0

私はモデル内でこのクエリを実行すべきですか? –

+0

またはコントローラでは、サブクエリで結合を使用してカウントをフェッチすることをお勧めします。どのように行うかは、どのDBとスキーマに依存しますか。 – max

答えて

1

を与えます。あなたはこのようにそれを使用することができます:

supplier.variants.product.select("DISTINCT COUNT(*) AS COUNT") 

は本当にあなたのスキーマとモデルが設計されていますので、selectがクエリに早く連鎖させることが必要になる場合があります方法を知っていません。しかし、これを必ずHAMLに挿入することができます。

Maxはすでに指摘しているとおり、可能な場合はビュー内でクエリを実行しないでください。それが不可能な場合は、悪い道をあなたに強制する可能性があるので、あなたのデザインを再考してください。

関連する問題