1

在我的 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....
...                               ^

我无法弄清楚语法错误是什么。我完全被难住了。

4

2 回答 2

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
于 2013-06-03T04:05:07.060 回答
0

也许如果您删除逗号它会起作用(是current_user.current_program.name一种将哈希作为参数的方法吗?)

于 2013-06-03T04:06:24.490 回答