2013-07-21 102 views
0

我在客戶模型調用中使用以下查詢來獲取我想要的一組事務。但是,這返回一個散列數組的數組。從導軌控制檯Can Rails數組可以「解壓縮」嗎?

[ [# <TransactionItem id: 29, amount: 20>, #<TransactionItem id: 35, amount: 40>],<br> 
    [# <TransactionItem id: 31, amount: 30>, #<TransactionItem id: 38, amount: 30>],<br> 
    [# <TransactionItem id: 43, amount: 30>, #<TransactionItem id: 21, amount: 40>],<br> 
] 

此過程運作良好。但現在我試圖在transaction_items上運行where查詢,但不能因爲它們嵌入到數組中。這是我最後期望的查詢,我無法運行。

transaction_items.where(:amount => 30).sum("amount") 

我知道你可以Zip數組,但你可以解壓嗎?我找不到任何文檔。如果沒有解壓縮,我可以調整哪些查詢來處理嵌入式數組?

謝謝。

+0

至於dispapperaing TEH尖括號中。將其標記爲代碼,它將保持標記 –

+0

謝謝託尼,只是編輯 –

回答

1

什麼:

transactions_items = [] 
transactions.each{|n|transactions_items = transactions_items.concat(n.transaction_items)} 

假設transactions.transactions_items是一個數組。 .each將塊應用於每個項目,它將當前元素ntransactions_items連接到數組transactions_items。

sum = 0 
toSum = transactions_items.where(:amount => 30) 
toSum.each{|transaction_item|sum += transaction_item.amount} 

sum = 0 
toSum = transactions_items.where(:amount => 30) 
toSum.inject{|sum, transaction_item| sum + transaction_item.amount} 

參見How to sum array of numbers in Ruby?

+0

嗨丹尼斯。你能否更詳細地解釋一下transaction.each方法會發生什麼?這應該返回什麼。我似乎無法得到這個工作在我的軌道控制檯。另外,你是否意味着把交易的「_items」,或者它應該匹配模型,transaction_items? –

+1

@Josh_Katz「s」是一個錯字(現在被糾正)。 – Dennis

+0

@Josh_Katz增加了更多的解釋! – Dennis

相關問題