2010-09-02 2 views
1

У меня есть следующий код, который отображает инструкции в упорядоченном списке. Когда он отображается в браузере, он выводит все инструкции в конце в одной строке. Я делаю что-то неправильно? Например, см. Вывод ниже.Итерация строк с использованием each_line

Код:

<% @recipe.instructions.each_line do |instruction| %> 
    <li><%= instruction %></li> 
<% end %> 

Выход:

<p> 
    <b>Instructions:</b> 
    <ol> 
     <li>Roast garlic 
</li> 
     <li>test 
</li> 
     <li>eat icecream</li> 
Roast garlic 
test 
eat icecream </ol> 
</p> 

Rails 3 RC2 рубин 1.9.2dev (2010-07-11 редакция 28618)

+0

Вы можете разделить код выше и ниже этого? У меня такое чувство, что может быть какой-то временный код отладки lurking ... – Brian

+0

На самом деле вы можете увидеть весь код, вот страница, о которой идет речь http://github.com/quattro004/scratches/blob/master/app/views/ recipes/show.html.erb см. вокруг строки 46 - 53. – Reese

ответ

5

Вы уверены, что вы не делаете что-то вроде этого?

<%= @recipe.instructions.each_line do |instruction| %> 
    <li><%= instruction %></li> 
<% end %> 

Обратите внимание на дополнение = в начале цикла. Поскольку every_line возвращает строку, она снова выплюнет строку.

+0

На самом деле я получал следующее предупреждение об отказе в этой строке (ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: <% %> стилистов блока стиля устарели. Используйте <%= %>), поэтому я добавил = и предупреждение уходит, но выход все тот же. – Reese

+0

Я мог ошибаться, но я действительно не думаю, что <% %> устарел. <%- %> Возможно. – AboutRuby

0

Итак, я, наконец, понял это. Я изменил код на использование Array # each и удалил знак равенства в вспомогательном блоке.

Окончательный код:

<% @recipe.instructions.split(/\r\n/).each do |instruction| %> 
    <li><%= instruction %></li> 
<% end %> 
Смежные вопросы