【问题标题】:Create an array with different sales created at the same time Ruby on Rails创建一个同时创建不同销售额的数组 Ruby on Rails
【发布时间】:2015-01-14 14:19:35
【问题描述】:

试图创建一个数组,将销售额按创建时间和进行销售的人分组。 以下是我们目前所拥有的:

@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

以下是错误的快照。上面的代码是索引,下面是错误代码。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 他说他想按 created_at 的小时而不是秒对它们进行分组,这解决了您的重复时间问题。
    • 另外,应该注意的是,这一行不会返回一个普通的“数组”,而是一个ActiveRecord::Association
    • 谢谢@MaxWilliams,错过了那部分。我认为 Sales.all.group(["DATE_PART('hour', created_at)", :client_id]) 在这种情况下应该可以工作。
    • 感谢@mattforni,尝试了您的代码,但不断收到错误:未初始化的常量 VistaventasController::Sales
    • 你应该说Sale.select 而不是Sales.select - Sale 是类名。这就是那个错误告诉你的。
    【解决方案2】:

    根据我的经验,将小组作为查找的一部分从来​​没有真正给我想要的东西。通常最好将它们全部获取,然后使用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 :)

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      相关资源
      最近更新 更多