我正在尝试通过执行以下操作,通过将外部请求分配给变量来创建要发送的收件人列表:
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 :(得分:3)
问题在于散列末尾的逗号。此外,如果您要将电子邮件和金额存储在收件人中,则应使用地图。这将返回一个带有电子邮件和金额的哈希数组:
recipients = @items.map do |item|
{"email"=> Recipient.find_by_id(item.recip_id).email, "amount"=> item.price}
end
另外,正如您可能注意到的,我不需要将电子邮件和价格的值作为字符串传递。
答案 1 :(得分:1)
如果您想从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