Printing elements of array using ERB

2019-03-31 01:50发布

I'm trying to print a simple array defined in my controller into my view with a new line for each element. But what it's doing is printing the whole array on one line.

Here's my controller:

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

Here's my view:

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

Here's the result:

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

5条回答
趁早两清
2楼-- · 2019-03-31 02:06

Two issues with your view:

  1. you are using "<%=" where you should be using "<%".
  2. you don't need 'puts'

This should improve your results:

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

I would further consider using some HTML structure to better structure your todo list (instead of using br tag at the end of lines), perhaps an un-ordered list like so:

<ul>
  <% @todo_array.each do |t| %>
    <li><%= t %></li>
  <% end %>
</ul>
查看更多
干净又极端
3楼-- · 2019-03-31 02:11

Remove the equal sign from your each statement:

<% @todo_array.each do |t| %>
  <%= t %><\br>
<% end %>
查看更多
Bombasti
4楼-- · 2019-03-31 02:14

Just try:

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

instead of

<%= @todo_array.each do |t| %>
   <%= puts t %><\br>
<% end %>
查看更多
女痞
5楼-- · 2019-03-31 02:15

Erb, the templating engine you're using in your views, has a few different ways of embedding ruby code inside templates.

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.

查看更多
欢心
6楼-- · 2019-03-31 02:15

Hey why are you putting '=' sign in first line. <% %> are used for telling rails that string under this is ruby code,evaluate it. Where as <%= %> this tells rails that string in these tags is in ruby, evaluate it and print the result in html file too.

Hence try to inspect your code you are writing

<%= @todo_array.each do |t| %> while this line is only for iterating over @todo_array hence we wont be in need to print that line. So final code should be

<% @todo_array.each do |t| %>
 <%= puts t %>
<% end %>
查看更多
登录 后发表回答