可以将Rails阵列“解压缩”吗?

时间:2013-07-21 15:31:04

标签: sql arrays ruby-on-rails-3

我在客户模型调用中使用以下查询来获取我想要的一组事务。

  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查询以在嵌入式阵列上工作吗?

感谢。

1 个答案:

答案 0 :(得分:1)

怎么样:

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

假设transactions.transactions_items是一个数组。 .each将块应用于每个项目,该项目将当前元素transactions_items的{​​{1}}连接到数组transactions_items。

n

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

请参阅How to sum array of numbers in Ruby?