2011-06-02 2 views
0

Ниже приведен код из учебника ERB. Когда я пытался выполнить код, компилятор жаловался на высказывание «(erb): 16: неопределенная локальная переменная или метод« priority »для main: Object (NameError)». Я не могу понять причину. Может кто-нибудь, пожалуйста, помогите мне?Ruby Undefined Локальная переменная

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

Удаляет первые два пробела в начале каждой строки строки. Это, похоже, устраняет проблему с отступом, но на самом деле является субоптимальным решением. Лучше использовать '<<' -style HERE doc. – tadman

 Смежные вопросы

  • Нет связанных вопросов^_^