【问题标题】:Rails splitting active record result into arrays/hashesRails 将活动记录结果拆分为数组/散列
【发布时间】:2016-11-23 10:26:15
【问题描述】:

假设我有一个这样的 Activerecord 结果:

order.order_numbers

返回ActiveRecord_Associations_CollectionProxy

=> [#<OrderNumber id: 53425, Order_number: "01100", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:20:36">,
 #<OrderNumber id: 53426, Order_number: "04503", Order_number_id: 5391, Order_number_status_id: 1, comment: nil,  updated_at: "2016-11-18 16:19:49">,
 #<OrderNumber id: 53427, Order_number: "011004", Order_number_id: 5391, Order_number_status_id: 2, comment: nil, updated_at: "2016-11-18 16:19:49">,
 #<OrderNumber id: 53428, Order_number: "004505", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">,
 #<OrderNumber id: 53429, Order_number: "4506", Order_number_id: 5391, Order_number_status_id: 2, comment: nil,  updated_at: "2016-11-18 16:19:49">,
 #<OrderNumber id: 53430, Order_number: "4507", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">]

注意Order_number_status_id,其中1 表示打开,2 表示关闭

如果我想根据“关闭”状态将其拆分并将结果输出到单独的数组中,该怎么做?我只想将未结订单放入自己的数组中,但每次从封闭数字移动到开放数字时都会启动一个新数组。

在上面的例子中,结果是

  • Array_1 将包含 id 53425 和 53426

  • Array_2 将包含 id53428

  • Array_3 将包含 id 53430

因此它会将其拆分为 3 个不同的散列或数组,这些散列或数组仅包含未结订单号,它们都将位于一个数组中。

[[#<OrderNumber id: 53425, Order_number: "01100", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:20:36">,
 #<OrderNumber id: 53426, Order_number: "04503", Order_number_id: 5391, Order_number_status_id: 1, comment: nil,  updated_at: "2016-11-18 16:19:49">,], [<OrderNumber id: 53428, Order_number: "004505", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">], [<OrderNumber id: 53430, Order_number: "4507", Order_number_id: 5391, Order_number_status_id: 1, comment: nil, updated_at: "2016-11-18 16:19:49">]]

我愿意接受有关输出格式的建议。

【问题讨论】:

    标签: ruby-on-rails arrays


    【解决方案1】:

    为什么不只是 .split? Array#Split

    order.order_numbers.split{|o| o.Order_number_status_id == 0}
    

    【讨论】:

      【解决方案2】:

      您可以使用group_by

      最适合你的情况

      【讨论】:

        【解决方案3】:

        看看标准方法Enumerable#chunk

        你可以这样做:

        order.order_numbers.chunk { |o_num| o_num.Order_number_status_id == 1 }.each{|a, b| p b}
        

        将结果保存在新数组中以删除不必要的部分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-15
          • 1970-01-01
          • 1970-01-01
          • 2015-12-15
          • 2011-10-06
          • 2023-03-19
          • 1970-01-01
          相关资源
          最近更新 更多