在创建销售时和创建销售的人时,尝试创建销售数组。 这是我们到目前为止所拥有的:
@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
以下是错误的快照。顶部的代码是索引,底部是错误。
答案 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:)