2013-07-21 2 views
0

고객 모델 호출에서 다음과 같은 쿼리를 사용하여 원하는 트랜잭션 집합을 얻습니다.Rails 배열을 "압축 해제"할 수 있습니까?

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

그러나 이것은 해시 배열의 배열을 반환합니다. 레일 콘솔에서

[ [# <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에 대한 쿼리를 실행하려고하지만 배열에 포함되어 있기 때문에 그럴 수 없습니다. 다음은 내가 실행할 수없는 마지막으로 원하는 쿼리입니다.

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

난 당신이 배열을 우편 수있어,하지만 당신은 그것을 압축을 해제 할 수 있습니다? 그것에 관한 문서를 찾을 수 없습니다. 압축을 풀지 않으면 임베디드 배열에서 작동하도록 Where 쿼리를 적용 할 수 있습니까?

감사합니다.

+0

지금까지 TEH 꺾쇠 괄호 dispapperaing있다. 코드로 표시하면 마크 업을 유지합니다 –

+0

Thanks Tony, 방금 만든 편집 –

답변

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

안녕하세요. 당신은 거래들에 대해 좀 더 자세히 설명해 주실 수 있습니다. 이것은 무엇을 돌려 보내야 하는가? 내 레일 콘솔에서이 기능을 사용할 수없는 것 같습니다. 또한, 트랜잭션 "s"_items를 넣었습니까? 아니면 모델 인 transaction_items와 일치해야합니까? –

+1

@Josh_Katz "s"는 오타였습니다 (지금 수정 됨). – Dennis

+0

@Josh_Katz이 (가) 더 많은 설명을 추가했습니다! – Dennis

관련 문제