使用ERB打印arrays元素

我正在尝试将我控制器中定义的简单数组打印到我的视图中,每个元素都有一个新行。 但它正在做的是将整个arrays打印在一条线上。

这是我的控制器:

class TodosController < ApplicationController def index @todo_array = [ "Buy Milk", "Buy Soap", "Pay bill", "Draw Money" ] end end 

这是我的观点:

    

这是结果:

     ["Buy Milk", "Buy Soap", "Pay bill", "Draw Money"] 

Erb,您在视图中使用的模板引擎,有几种不同的方法可以在模板中嵌入ruby代码。

当您将代码放在<%= %>块中时,erb会对内部代码进行评估,并在HTML中输出最后一个语句的值。 由于ruby中的.each返回您迭代的集合,因此使用<%= %>的循环会尝试打印整个数组的字符串表示forms。

当您将代码放在<% %>块中时,erb只会评估代码,而不是打印任何内容。 这允许您在视图中执行条件语句,循环或修改变量。

您也可以从puts t删除puts t 。 Erb知道尝试将它在<%= %>内看到的最后一个值转换为字符串以供显示。

您认为有两个问题:

  1. 你正在使用“<%=”你应该使用“<%”。
  2. 你不需要’放’

这应该会改善您的结果:

 <% @todo_array.each do |t| %> <%= t %><\br> <% end %> 

我会进一步考虑使用一些HTML结构来更好地构建您的待办事项列表(而不是在行尾使用br标记),也许是一个无序列表,如下所示:

 
    <% @todo_array.each do |t| %>
  • <%= t %>
  • <% end %>

嘿,你为什么要把’=’标志放在第一行。 <%%>用于告诉rails其下的字符串是ruby代码,对其进行评估。 其中<%=%>这告诉rails这些标签中的字符串是ruby,评估它并在html文件中打印结果。

因此,请尝试检查您正在编写的代码

<%= @ todo_array.each do | t | %>虽然这一行仅用于迭代@todo_array,因此我们不需要打印该行。 所以最终的代码应该是

 <% @todo_array.each do |t| %> <%= puts t %> <% end %> 

试一试:

<%= @todo_array.join('
').html_safe %>

代替

 <%= @todo_array.each do |t| %> <%= puts t %><\br> <% end %> 

从每个语句中删除等号:

 <% @todo_array.each do |t| %> <%= t %><\br> <% end %>