Ruby on Rails视图莫名打印@destinations变量内容问题求助
解决Rails视图遍历数组后额外输出原数组的问题
这个问题其实是ERB模板标签使用的典型误区,我来帮你拆解原因和解决办法:
问题根源
你在视图里写的<%=@destinations.each do |dest| %>用了<%= %>标签,这个标签的作用是执行Ruby代码并把代码的返回值输出到页面上。而Ruby的each方法本身的特性是:遍历完集合后,会返回调用它的原集合(也就是@destinations数组)。所以循环执行完后,ERB就把这个返回的数组也渲染到页面上了,这就是你看到末尾["Laos", "Latvia"]的原因。
修复方案
只需要把循环开头的<%=改成<% %>就可以了——这个标签是用来执行Ruby代码但不输出返回值的,正好符合我们只需要遍历数组、输出每个元素的需求:
<% @destinations.each do |dest| %> <%= dest %> <% end %>
修改后再运行,页面就只会输出Laos Latvia,不会再出现后面的数组内容了。
额外小技巧
如果你的需求只是简单地把数组元素用空格(或其他分隔符)拼接输出,也可以用更简洁的写法:
<%= @destinations.join(' ') %>
不过这种方式适合元素输出逻辑简单的场景,如果每个元素需要搭配HTML标签(比如<li>),还是用第一种循环的方式更灵活。
内容的提问来源于stack exchange,提问作者Anthony Wood
相关产品推荐
相关产品推荐

