在我的profile.html.erb文件中,每当我尝试将类或ID分配给erb时,我都会收到语法错误。以下是一个例子:
<p>"<%= current_user.current_program.name, :id => 'progress' %>" Progress</p>
这给了我以下错误:
SyntaxError in Users#profile
Showing /.../app/views/users/profile.html.erb where line #13 raised:
/Users/.../app/views/users/profile.html.erb:13: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.'
...er.current_program.name, :id => 'progress' );@output_buffer....
... ^
我无法弄清楚语法错误是什么。我完全被难过了。
答案 0 :(得分:4)
我们可以像这样在独立的Ruby中重现和简化您的问题:
require 'erb'
ERB.new("<p><%= name, :a => 'b' %></p>").run
产生错误:
SyntaxError: (erb):1: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.'
..."; _erbout.concat(( name, :a => 'b' ).to_s); _erbout.concat ...
... ^
from /Users/phrogz/.../ruby/1.9.1/erb.rb:838:in `eval'
from /Users/phrogz/.../ruby/1.9.1/erb.rb:838:in `result'
from /Users/phrogz/.../ruby/1.9.1/erb.rb:820:in `run'
from (irb):2
from /Users/phrogz/.../bin/irb:16:in `<main>'
更简单地说,将ERB排除在外:
a, :b=>'c'
#=> SyntaxError: (irb):3: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.'
你所拥有的不是有效的Ruby代码。你想做什么?将:id => 'progress'
哈希作为参数传递给.name
方法?如果是,则删除逗号,并(为了清楚起见)(可选)包括括号:
<p>"<%= current_user.current_program.name( :id=>'progress' ) %>" Progress</p>
如果您使用的是Ruby 1.9+,则可以使用更简单的Hash-with-symbol-keys语法:
<p>"<%= current_user.current_program.name( id:'progress' ) %>" Progress</p>
然而,我似乎不太可能name
方法采用这样的哈希,所以我再次问:你真正想要完成什么? name
方法返回什么,你想要什么HTML输出?
猜测一下,也许您希望.name
返回的文字包含在<span id="progress">
中?如果是这样,你必须这样做:
<p>"<span id="progress"><%= current_user.current_program.name%></span>" Progress</p>
或者使用content_tag
:
<p><%= content_tag("span", current_user.current_program.name, id:'progress') %> Progress</p>
在Haml,这将是:
%p
%span#progress= current_user.current_program.name
Progress
答案 1 :(得分:0)
也许你删除了逗号它会起作用(current_user.current_program.name
是一个以哈希作为参数的方法吗?)