2011-06-02 20 views
0

以下はERBチュートリアルのコードです。私がコードを実行しようとすると、コンパイラは "(erb):16:未定義のローカル変数またはmain:Object(NameError)"のメソッド `priority 'と訴えました。私はその理由を理解できません。誰かが私を助けてくれますか?Ruby未定義ローカル変数

require "erb" 

# Create template. 
template = %q{ 
    From: James Edward Gray II <[email protected]> 
    To: <%= to %> 
    Subject: Addressing Needs 

    <%= to[/\w+/] %>: 

    Just wanted to send a quick note assuring that your needs are being 
    addressed. 

    I want you to know that my team will keep working on the issues, 
    especially: 

    <%# ignore numerous minor requests -- focus on priorities %> 
    % priorities.each do |priority| 
    * <%= priority %> 
    % end 

    Thanks for your patience. 

    James Edward Gray II 
}.gsub(/^ /, '') 

message = ERB.new(template, 0, "%<>") 

# Set up template data. 
to = "Community Spokesman <[email protected]_community.org>" 
priorities = [ "Run Ruby Quiz", 
       "Document Modules", 
       "Answer Questions on Ruby Talk" ] 

# Produce result. 
email = message.result 
puts email 

答えて

0

ERBテンプレートは、字下げによって生じる問題です。あなただけの真ん中を修正する必要があります。

<% priorities.each do |priority| %> 
    * <%= priority %> 
    <% end %> 

代替構文は非常にラインの開始%を持つことです。あなたのケースでは、誤ってERBの一部を無効にしているスペースをいくつか追加しました。

+0

これは正しいです。Tadmanに感謝します。 –

+0

ところでこの場合gsubは何をしていますか?テンプレート内または生成されたテキスト内を置換するか? –

+0

これは、文字列の各行の先頭にある最初の2つの空白を削除します。これはインデントの問題を修正するようですが、実際には最適以下の解決策です。 '<<'スタイルのHEREドキュメントを使う方が良いでしょう。 – tadman

関連する問題