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 に答える