分组时不显示Rails记录

时间:2015-05-29 16:55:10

标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord

我有一个书模型,为了这个问题有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),它会在正确的月份显示所有打印运行但是每个问题都在自己的运行中。

以下是一些图片来说明问题。提前谢谢!

1 个答案:

答案 0 :(得分:0)

作为一个FYI,我重写了所有事情......在我的控制器中,我现在有了:

@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(&#34; DISTINCT(title)&#34;)。group(&#34; title&#34;)。第一部分解决了我的独特问题,但让PGError因为PostgreSQL默认情况下按ID显示组。通过指定组(&#34;标题&#34;)我解决了问题(即使这看起来显然是多余的)。

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