次のように、スタンドアロンの 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