Синтаксическая ошибка Rails при назначении переменной для каждого цикла - PullRequest
1 голос
/ 14 января 2012

Я пытаюсь создать список получателей для отправки во внешнем запросе, назначив его переменной, выполнив следующие действия:

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

Ответы [ 2 ]

3 голосов
/ 14 января 2012

Проблема с запятой в конце хеша.Также, если вы хотите сохранить адрес электронной почты и сумму в получателях, вы должны использовать карту.Это вернет массив хэша с электронной почтой и суммой:

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

Кроме того, как вы могли заметить, мне не нужно передавать значения электронной почты и цены в виде строки.

1 голос
/ 14 января 2012

Если вы хотите вернуть несколько хешей из вашего блока map, вам лучше переключиться на each_with_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...