2015-05-29 189 views
1

我有一本书模型,为了这个问题的缘故,它有5个字段(id,title,issue,release_date,print_run)。我试图填充按标题所以在这里分组销售表是我在我的控制器:分组时不显示轨道记录

@books = Book.all.where("release_date > ?", "2012-05-01").where("print_run > ?", "1").group(:title) 

在我看来,这里的表的一部分:

<% @books.each do |title| %> 
<tr> 
<td><%= title.title %></td> 
<td class="text-center"> 
<% if title.print_run > 1 && title.release_date.between?((Date.today - 12.month).beginning_of_month, (Date.today - 12.month).end_of_month) %> 
<%= title.print_run %> 
<% else %> 
    0 
<% end %> 
</td> 
</tr> 
<% end %> 

每本书都有一个问题每个月,我有一个表格设置了14列(标题,每月一个,总数)。我想按月显示每个TITLE的print_run,但是当我在控制器中使用group(:title)时,它只显示上个月的打印运行(但其余为0)。如果我从控制器中删除group(:title),它会在正确的月份显示所有的打印运行,但每个问题都在自己的运行中。

这里有几张图片来说明这个问题。提前致谢!

+0

这就是你的条件是,你正在检查的开始和最后一个月是你的查询 –

+0

(Date.today - 12.months).beginning_of_month显示完全一样,因为它应该... 2014-05-01 and(Date .today - 12.months).end_of_month as 2014-05-31 so release_date正确地落在 – user3141095

+0

之间请理解您是在说1-5-2014和31-5-2014之间的发布日期然后显示print_run else 0 –

回答

0

作为一个供参考我修改了整个事情......在我的控制器我现在有:

@book = Book.where(:rdate => (Date.today - 12.month)..(Date.today - 1.month)).where("printrun > ?", "1").select("DISTINCT(title)").group("title").order("title") 

...然后在我看来:

<%= Book.where(:title => title.title, :rdate => (Date.today - 1.month).beginning_of_month..(Date.today - 1.month).end_of_month).sum(:printrun) %> 

现在视图部分可能不是很理想,我会动议到控制器在某个时候,但问题解决了。请注意,我必须在控制器中添加select(“DISTINCT(title)”)。group(“title”)。第一部分解决了我唯一的问题,但是让我们看到了PGError,因为PostgreSQL默认情况下是通过ID进行分组的。通过指定组(“标题”)我解决了问题(即使这看起来显然是多余的)。

希望这有助于下一个有类似问题的人。