在Ruby on Rails上创建一个具有不同销售额的数组

时间:2014-11-17 15:57:24

标签: ruby-on-rails arrays postgresql time timestamp

在创建销售时和创建销售的人时,尝试创建销售数组。 这是我们到目前为止所拥有的:

@sales = Sales.select("date(created_at) as ordered_date").group("DATE_PART('hour', created_at)")

我们有一个销售表,其中有一个带有时间戳的created_at字段。它还有一个client_id,我们可以确保我们由进行销售的人进行分组。

我们如何创建一个有效的数组? 我们对rails很新,所以很容易理解。

使用:Ruby on Rails 4,PostreSQL

以下是错误的快照。顶部的代码是索引,底部是错误。

error screen

2 个答案:

答案 0 :(得分:0)

如果您想将销售的 所有 分组,您应该可以:

Sales.all.group(:client_id, :created_at)

或者,如果您尝试按:created_at进行分组,然后:client_id只需切换订单即可。虽然只是一个注释,但我不建议按:created_at进行分组,因为除非您处理 的交易,否则很少会有重复的次数。您不需要编写原始SQL,因为ActiveRecord根据您在数据库文件中定义的适配器处理SQL查询。

答案 1 :(得分:0)

根据我的经验,将小组视为发现的一部分从来​​没有真正给我我想要的东西。通常更好地获取它们然后使用Array#group_by对它们进行分组。然后,在组中,您有一系列可以迭代的数组。像这样:

#in Sale model - convenience method
def created_at_hour
  Time.at((self.created_at.to_f / 1.hour).round * 1.hour)
end

#controller
@grouped_sales = Sales.order(:created_at).group_by(&:created_at_hour)

#view
<% #the hash keys *should* be in time order but just in case, let's order them %>
<% @grouped_sales.keys.sort.each do |time| %>
  <div class="sale-group">
    <h3><%= time.strftime("%H:00, %d/%m/%Y") %></h3>
    <%  @grouped_sales[time].each do |sale| %>
      <div class="sale">
       <!-- sale html -->
      </div>
    <% end %>
  </div>
<% end %>

编辑 - 哎呀,忘了关闭div:)