【问题标题】:Printing elements of array using ERB [duplicate]使用ERB打印数组元素[重复]
【发布时间】:2012-10-24 13:02:10
【问题描述】:

我正在尝试将控制器中定义的简单数组打印到我的视图中,并为每个元素添加一个新行。但它所做的是将整个数组打印在一行上。

这是我的控制器:

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

这是我的看法:

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

结果如下:

<\br> <\br> <\br> <\br> ["Buy Milk", "Buy Soap", "Pay bill", "Draw Money"]

【问题讨论】:

    标签: ruby-on-rails ruby arrays erb


    【解决方案1】:

    您在视图中使用的模板引擎 Erb 有几种不同的方式将 ruby​​ 代码嵌入到模板中。

    当您将代码放入 &lt;%= %&gt; 块中时,erb 会评估其中的代码并打印 HTML 中最后一条语句的值。由于 ruby​​ 中的 .each 返回您迭代的集合,因此使用 &lt;%= %&gt; 的循环尝试打印整个数组的字符串表示形式。

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

    您还可以从puts t 中删除puts。 Erb 知道尝试将它在 &lt;%= %&gt; 中看到的最后一个值转换为字符串以供显示。

    【讨论】:

      【解决方案2】:

      嘿,为什么要在第一行添加“=”符号。 用于告诉rails该字符串下的字符串是ruby代码,评估它。 这告诉 Rails 这些标签中的字符串是 ruby​​ 格式,评估它并将结果也打印到 html 文件中。

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

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

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

      【讨论】:

      • 就像您自己的回答所说的那样,不需要 puts - &lt;%= 打印结果。
      【解决方案3】:

      试试吧:

      &lt;%= @todo_array.join('&lt;br /&gt;').html_safe %&gt;

      而不是

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

      【讨论】:

        【解决方案4】:

        你的观点有两个问题:

        1. 您在应该使用“
        2. 你不需要'puts'

        这应该会改善您的结果:

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

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

        <ul>
          <% @todo_array.each do |t| %>
            <li><%= t %></li>
          <% end %>
        </ul>
        

        【讨论】:

          【解决方案5】:

          从每个语句中删除等号:

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

          【讨论】:

            猜你喜欢
            • 2013-09-12
            • 2021-05-03
            • 2012-06-09
            • 2017-10-13
            • 2012-05-13
            • 2013-06-21
            • 1970-01-01
            • 2013-12-29
            • 2014-12-08
            相关资源
            最近更新 更多