0

我在客户模型调用中使用以下查询来获取我想要的交易集。

  transactions = sub_account.transactions
  transaction_items = transactions.map{|transaction| [transaction.transaction_items]}

但是,这将返回散列数组的数组。从 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")

我知道你可以压缩一个数组,但你能解压缩它吗?我找不到任何关于它的文档。如果没有解压缩,我可以调整 where 查询以在嵌入式数组上工作吗?

谢谢。

4

1 回答 1

1

关于什么:

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

假设 transactions.transactions_items 是一个数组。 .each将块应用于每个项目,这会将transactions_items当前元素n的 连接到数组 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}

请参阅如何对 Ruby 中的数字数组求和?

于 2013-07-21T16:11:19.757 回答