5

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

这是我的控制器:

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"]
4

5 回答 5

14

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

When you put code inside <%= %> blocks, erb evaluates the code inside and prints the value of the last statement in the HTML. Since .each in ruby returns the collection you iterated over, the loop using <%= %> attempts to print a string representation of the entire array.

When you put code inside <% %> blocks, erb just evaluates the code, not printing anything. This allows you to do conditional statements, loops, or modify variables in the view.

You can also remove the puts from puts t. Erb knows to try to convert the last value it saw inside <%= %> into a string for display.

于 2012-11-04T14:56:38.260 回答
6

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

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

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

<% @todo_array.each do |t| %>
 <%= puts t %>
<% end %>
于 2012-11-04T14:55:42.883 回答
6

Just try:

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

instead of

<%= @todo_array.each do |t| %>
   <%= puts t %><\br>
<% end %>
于 2014-03-18T16:28:22.133 回答
5

你的观点有两个问题:

  1. 您在应该使用“<%”的地方使用“<%=”。
  2. 你不需要'puts'

这应该会改善您的结果:

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

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

<ul>
  <% @todo_array.each do |t| %>
    <li><%= t %></li>
  <% end %>
</ul>
于 2012-11-04T14:49:19.680 回答
2

从每个语句中删除等号:

<% @todo_array.each do |t| %>
  <%= t %><\br>
<% end %>
于 2012-11-04T14:42:51.487 回答