簡體   English   中英

Rails將活動記錄結果拆分為數組/哈希

[英]Rails splitting active record result into arrays/hashes

可以說我有一個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">]]

我願意接受有關輸出格式的建議。

為什么不只是.split? 數組#拆分

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

您可以使用group_by

最適合你的情況

看看標准方法Enumerable#chunk

您可以執行以下操作:

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

將結果保存在新數組中以刪除不必要的片段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM