Ruby on rails 神秘的ruby语法错误
我不再困惑了:这几乎是一个RoR操作邮件指南的复制/粘贴,但它抛出了一个语法错误:Ruby on rails 神秘的ruby语法错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,我不再困惑了:这几乎是一个RoR操作邮件指南的复制/粘贴,但它抛出了一个语法错误: class Contact < ActionMailer::Base def contact a_name, a_company, a_phone, a_email, a_comments subject "Contact request from #{name}" recipients "some@address.com" from "some_other
class Contact < ActionMailer::Base
def contact a_name, a_company, a_phone, a_email, a_comments
subject "Contact request from #{name}"
recipients "some@address.com"
from "some_other@address.com"
sent_on Time.now
body { :name => a_name, :company => a_company, :phone => a_phone, :email => a_email, :comments => a_comments }
end
end
有什么想法吗?我不知道我做错了什么。添加括号body({…})
以明确说明您正在使用散列参数进行方法调用
否则,
{…}
可能会与body
方法中传递的函数(或lambda,不管是什么官方术语)相混淆:body{put“Hello world!”
从调用(1)到#body
中删除{/code>和}/code>
(1)更新:
发生此错误是因为在Ruby中,{}
有两种不同的含义:散列值表达式和方法块。如果在poetry模式下调用过程(无parens),那么如果解析器遇到{
在方法名之后。它是块的开头还是散列表达式的参数?在您的特定情况下,一个不幸的假设是它是块。
现在,正如所发生的那样,Ruby不需要{}
当散列是方法的最终参数时,围绕散列表达式。因此,至少有两种方法可以解决此问题:(1)删除{
和}
--Ruby知道您正在传递散列参数;或(2)添加方法parens。鉴于Rails通常在诗歌模式中使用,删除字符并利用聪明的Ruby解析器而不是将它们添加回la C或Java似乎是有意义的。
或者,正如@NikitaRybak所建议的,添加括号。它不会与lambda混淆,而是一个块。
app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting '}' body { :name => a_name, :company => a_company... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...{ :name => a_name, :company => a_company, :phone => a_phone,... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...ompany => a_company, :phone => a_phone, :email => a_email, :... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ..., :phone => a_phone, :email => a_email, :comments => a_comme... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...email => a_email, :comments => a_comments, } ^