我的rake任务中有这个代码:
variables[:hotels].push(
{
:id => offering.ID,
:name => offering.vendor.Name,
:placing_name => offering.Name,
My::Media::Account.find_by_guid(offering.VendorID).photos.each do |p|
:hotel_images.push({
:id => p.id,
:image => p.image,
:url => "http://m.website.com/uploads/photo/image/#{p.id}/#{p.image}"
})
end #there is an error
})
当我尝试运行它时,我在终端中收到错误syntax error, unexpected '\n', expecting tASSOC
。它指向最后end
。我在哪里弄错了?谢谢!
答案 0 :(得分:4)
您无法在那里插入可执行代码。 Ruby希望看到你定义的哈希中的下一个键,而不是一串代码。您也不能push
使用符号,:hotel_images.push({
无法上班。
如果您希望:hotel_images
映射到数组,则需要将键移到循环外部,并使用map
代替each
:
variables[:hotels].push(
{
:id => offering.ID,
:name => offering.vendor.Name,
:placing_name => offering.Name,
:hotel_images => My::Media::Account.find_by_guid(offering.VendorID).photos.map do |p|
{
:id => p.id,
:image => p.image,
:url => "http://m.website.com/uploads/photo/image/#{p.id}/#{p.image}"
}
end
})
虽然这在语法上并不正确,但它会让你在表现方面感到悲伤。由于这似乎是在循环中发生的,因此您应该使用includes
来包含photos
关联,而您应该只选择您感兴趣的属性。