减少sql查询

时间:2013-11-25 10:10:05

标签: ruby-on-rails activerecord

我有3个实体: 项目,关键字,报告 项目has_many关键字 关键字has_many项目 项目和报告has_many报告

在关键字索引中,我会将过去7天内所有关键字的报告加上当前日期的部分报告。我在这里遇到的问题是多个查询,我怎么能避免这个?

<%=render @keywords%>

部分:

<%=keyword.reports.find_today_project_k(Date.today).find_each do |keyword_r|%>
   [<%=keyword_r.pos%>]
<%end%>                  
<%=keyword.reports.find_today_project_k(Date.today - 1.day).find_each do |keyword_r|%>
   [<%=keyword_r.pos%>]
<%end%>
<%=keyword.reports.find_today_project_k(Date.today - 2.day).find_each do |keyword_r|%>
  [<%=keyword_r.pos%>]
<%end%>
<%=keyword.reports.find_today_project_k(Date.today - 3.day).find_each do |keyword_r|%>
  [<%=keyword_r.pos%>]
<%end%>   

控制器:关键字/索引

@keywords = project.keywords.page(params[:page])

谢谢

1 个答案:

答案 0 :(得分:0)

显然,您需要从3天到今天的记录。为什么不在一个查询中添加构建此WHERE子句的作用域?然后,您只需循环查询结果的关键字即可正确显示它们,而不是发出4个查询。

scope :latest, ->(date){ where("DATE(created_at) BETWEEN ? AND ?", date - 3.days, date) }