2011-07-06 70 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

这看起来似乎有点肮脏,但它是一个查询,统计一切。不要把它粘在一个视图,虽然。创建一个类方法并在控制器中分配变量。

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

我认为如果您创建一个类方法或范围来选择所需的所有条目,然后遍历视图中的集合,则会更快。您当前的视图代码正在每一行上进行数据库调用 - 您想要将它们捆绑到一个调用中。不知道更多关于模型之间的关系,它不容易更精确