2012-01-14 2 views
0

나는 다음을 수행하여 변수에 할당하여 외부 요청에 보낼 수신자 목록을 만들려고 해요 :레일 각 루프 변수를 지정하는 구문 오류를

recipients = @items.each do |item| 
    {"email"=>"#{Recipient.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"}, 
end 

하지만 난 이 오류가 발생합니다 :

syntax error, unexpected ',', expecting '}' 

나는 올바른 구문이 아니라는 것을 알고 있습니다. 나는 Ruby 초보자이다. 그래서 누군가 나에게 올바른 구문을 알 수있게 도와 줄 수 있을까?

편집 : 입력 해 주셔서 감사합니다. 하지만 각 항목에 대해 두 개의 해시를 수행해야하는 경우 어떻게해야합니까?

recipients = @items.map do |item| 
    {"email"=>"#{Recipient.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"}, 
    {"email"=>"#{Store.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"} 
end 
+0

는, 상기 제거 시도 해쉬 선언의 끝. –

답변

1

당신이 당신의 map 블록에서 여러 해시를 반환 할 경우에 당신은 each_with_object로 전환 나을 것 :

Iterates the given block for each element with an arbitrary object given, and returns the initially given object.

그래서 이런 식으로 뭔가 :

recipients = @items.each_with_object([]) do |item, a| 
    a << {"email"=>"#{Recipient.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"} 
    a << {"email"=>"#{Store.find_by_id(item.recip_id).email}", "amount"=>"#{item.price}"} 
end 
+0

아! 이것은 결국 그것을 해결합니다. << 연산자가 해쉬를에 추가한다고 가정합니다. – varatis

+0

@varatis : 예, ['Array # <<'] (http://ruby-doc.org/core-1.9.3/Array.html#method-i-3C-3C)는 ['Array # push'] (http://ruby-doc.org/core-1.9.3/Array.html#method-i-push). –

3

문제는 해시 끝에 쉼표로 표시됩니다. 또한 수신자에게 이메일과 금액을 저장하려면지도를 사용해야합니다. 이 이메일과 양 해시의 배열을 반환합니다

recipients = @items.map do |item| 
    {"email"=> Recipient.find_by_id(item.recip_id).email, "amount"=> item.price} 
end 

을 또한주의 수도로, 내가 문자열로 이메일의 가치와 가격을 통과 할 필요가 없습니다.

+0

감사합니다. 하지만 각 항목에 대해 두 개의 해시 (예 : 두 개의 이메일 - 금액 쌍)를 수행해야하는 경우 어떻게해야합니까? 나는 그 질문에 모범을 보였다. 죄송합니다 - 전에 물어 보지 않았지만, 최근에 각 항목에 대해 두 개의 해시가 필요하다는 것을 알게되었습니다. – varatis

+0

@varatis :'map' 블록에서 두 원소 배열을 반환하고 그 결과를'평평하게'하거나'each_with_object ([])'로 전환하여 두 항목을 블록 안의 배열에 넣을 수 있습니다. –

+0

해시 사용시 문제는 고유 키가 필요하다는 것입니다. 따라서 주요 전자 메일은 하나의 값 키만 가질 수 있습니다. 한 가지 방법은 해시 해시를 사용하는 것입니다. { "1"=> ​​{ "email"=> "abc", "amount"=> "xyz"}, "2"=> { "email"=> "pqr", "amount"=> "lmn "}}, 여기서 1과 2는 항목의 ID가 될 수 있습니다. –