difference between <%= and <%"

Hi all

what is the difference between <%= and <% in a view file?

thanks

<%= prints the contents of the tag, whereas <% does not

And you couldnt just try that out yourself? :smiley:

Tim Shaffer wrote in post #1017353:

<%= prints the contents of the tag,

Well, it never meant that. <%= tells ruby to print the result of the expression between the tags. For instance,

<%= 2+2 %>

would not print '2 + 2', it would print '4'. But even the "result of the expression" isn't an entirely accurate description--because in rails 3 you write:

<%= form_for(@user) do |f| %>

which doesn't fit that description. In ruby, 'form_for(@user) do |f|' isn't an expression--it's the first half of a loop/block, so it's an incomplete expression. In other words, in ruby if you wrote:

result = some_func(arg) do |x|

you would get an error. Maybe its best to think of <%= form_for() as an exception to the rule?

One example of how <%= and <% differ is this:

<% 3.times do |i| %> <div>loop: <%= i %></div> <% end %>

The <% tags just execute the ruby code and don't enter any text onto the page, which causes ruby/.erb to loop over the <div> tag 3 times. The <%= tag inside the loop prints the value of the variable i. So you get:

<div>loop: 0</div> <div>loop: 1</div> <div>loop: 2</div>

Tim Shaffer wrote in post #1017353:

<%= prints the contents of the tag,

Well, it never meant that. <%= tells ruby to print the result of the expression between the tags. For instance,

<%= 2+2 %>

would not print '2 + 2', it would print '4'. But even the "result of the expression" isn't an entirely accurate description--because in rails 3 you write:

<%= form_for(@user) do |f| %>

which doesn't fit that description. In ruby, 'form_for(@user) do |f>' isn't an expression--it's the first half of a loop/block, so it's an incomplete expression. In other words, in ruby if you wrote:

result = some_func(arg) do |x|

you would get an error. Maybe its best to think of <%= form_for() as an exception to the rule?

One example of how <%= and <% differ is this:

<% 3.times do |i| %> <div>loop: <%= i %></div> <% end %>

The <% tags just execute the ruby code and don't enter any text onto the page, which causes ruby/.erb to loop over the <div> tag 3 times. The <%= tag inside the loop prints the value of the variable i. So you get:

<div>loop: 0</div> <div>loop: 1</div> <div>loop: 2</div>

Here's another way to look at this. '<%=' is a shortcut for '<% puts'. There's a similar construction in PHP: '<?=' is a shortcut for '<?php echo (or print)'.

Walter

Thank you all for your answers!

Walter Davis wrote in post #1017505:

Here's another way to look at this. '<%=' is a shortcut for '<% puts'. There's a similar construction in PHP: '<?=' is a shortcut for '<?php echo (or print)'.

Walter

I do not believe you can use '<% puts' in ERB, i thought you are supposed to use '<% concat'

Alexey.

Walter Davis wrote in post #1017505:

Here's another way to look at this. '<%=' is a shortcut for '<% puts'. There's a similar construction in PHP: '<?=' is a shortcut for '<?php echo (or print)'.

Walter

I do not believe you can use '<% puts' in ERB, i thought you are supposed to use '<% concat'

Thanks! I never tried this, actually.

Walter