使用ERB打印阵列元素

Kev*_*161 4 ruby arrays ruby-on-rails erb

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

这是我的控制器:

class TodosController < ApplicationController
  def index
    @todo_array = [ "Buy Milk", "Buy Soap", "Pay bill", "Draw Money" ]
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的观点:

<%= @todo_array.each do |t| %>
<%= puts t %><\br>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是结果:

<\br> <\br> <\br> <\br> ["Buy Milk", "Buy Soap", "Pay bill", "Draw Money"]
Run Code Online (Sandbox Code Playgroud)

spi*_*ike 13

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

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

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

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


Aks*_*noi 6

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

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

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

<% @todo_array.each do |t| %>
 <%= puts t %>
<% end %>
Run Code Online (Sandbox Code Playgroud)


Spo*_*tor 5

您认为有两个问题:

  1. 您正在使用"<%=",您应该使用"<%".
  2. 你不需要'放'

这应该会改善您的结果:

<% @todo_array.each do |t| %>
  <%= t %><\br>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

<ul>
  <% @todo_array.each do |t| %>
    <li><%= t %></li>
  <% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)


RAJ*_*RAJ 5

试一试:

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

代替

<%= @todo_array.each do |t| %>
   <%= puts t %><\br>
<% end %>
Run Code Online (Sandbox Code Playgroud)