我们可以像这样在独立的 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