使用each_line的字符串迭代

问题描述:

我有以下代码,它在有序列表中显示指令。当它在浏览器中呈现时,它会在一行中输出最后的所有指令。难道我做错了什么?例如,请参阅下面的输出。使用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

你能分享及以上低于这个代码?我有一种感觉,可能会有一些临时调试代码潜伏... – Brian 2010-09-02 19:54:22

+0

其实你可以看到所有的代码,这里是问题的页面http://github.com/quattro004/scratches/blob/master/app/views/食谱/ show.html.erb见第46 - 53行。 – Reese 2010-09-04 16:06:11

你确定你不是在做这样的东西呢?

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

注意循环开始处的extra =。由于each_line返回字符串,它会再次将字符串吐出。

+0

实际上,我得到了该行的下面的弃用警告(弃权警告:样式块助手已弃用。请使用),所以我添加了=和警告消失,但输出仍然相同。 – Reese 2010-09-02 12:05:30

+0

我可能是错的,但我真的不认为已被弃用。 可能已经。 – AboutRuby 2010-09-02 22:35:04

所以我终于明白了这一点。我改变了代码使用Array#,并在块帮助器中删除了等号。

最终代码:

<% @recipe.instructions.split(/\r\n/).each do |instruction| %> 
    <li><%= instruction %></li> 
<% end %>