语法错误,意外',',期待tCOLON2或'['或'。'将课程分配给erb时

时间:2013-06-03 03:53:43

标签: ruby-on-rails ruby erb

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

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

2 个答案:

答案 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是一个以哈希作为参数的方法吗?)