2011-07-06 2 views
0

私の見解では、このコードをいくつかのjavascript変数に使用しています。私はそれをより効率的にすることができる任意のアイデア?不安定なコードが表示される

<% @sources.each_with_index do |source, index| %> 

(<%= index %>, 1, <%= Entry.includes(:main_entries).where("classification_id =? and category_id =? and source_id =?", 1, 1, source.id).count %>) 
(<%= index %>, 2, <%= Entry.includes(:main_entries).where("classification_id =? and category_id =? and source_id =?", 1, 2, source.id).count %>) 

<% end %> 

答えて

2

これは一見一見汚いかもしれませんが、1つのクエリですべてを1つに集計します。しかし、ビューにそれを固執しないでください。クラスメソッドを作成し、変数をコントローラに割り当てます。

Entry.find_by_sql(["SELECT classification_id, category_id, source_id, count(*) AS count_all FROM entries WHERE source_id IN (?) AND classification_id = 1 AND category_id IN (1, 2) GROUP BY classification_id, category_id, source_id", @sources.map(&:id)]); 

それは何でしょうがclassification_id、CATEGORY_ID、SOURCE_IDによってグループエントリで、そこにあるどのように多く数えるとcount_allとして保存(結果を通じて、後輪とentry.count_allを呼び出す)

あなたが必要とするすべてのこれまでのように、結果をループし、以前と同じようにJavaScriptを出力しますが、今回はデータベースに当たらないことになります。

0

クラスメソッドまたはスコープを作成して、必要なすべてのエントリを選択し、ビュー内のコレクションを反復すると、これがより迅速になると思います。あなたの現在のビューコードは、すべての行でデータベース呼び出しを行っています。これらを1つの呼び出しにまとめる必要があります。モデル間の関係についてもう少し詳しく知りませんが、より正確であることは容易ではありません。

関連する問題