Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing elements of array using ERB [duplicate]

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"]
like image 881
Keva161 Avatar asked Nov 04 '12 14:11

Keva161


1 Answers

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.

like image 187
spike Avatar answered Sep 16 '22 21:09

spike