Use of <%= %> instead of <% %> ruby on rails [duplicate] - ruby-on-rails

This question already has an answer here:
embedded ruby syntax "<%= .. %>" in rails [duplicate]
(1 answer)
Closed 8 years ago.
I've been following Agile Web Development with Rails, and their code suddenly switches from the use of <%= %> to <% %>.
Code Example 1:
<%= 1+2 %>
Code Example 2:
<% for file in #files %>
file name is: <%= file %>
<% end %>
My question is, for the second code sample why can I not use <%= %>?
Thanks!

In ERB (embedded ruby) syntax, <%= %> is shorthand for "perform the following ruby code AND THEN print the result". So in the first example, it will print the result of the operation 1 + 2, 3.
The second example shows a for loop which will iterate and print the contents between the for declaration and its corresponding <% end %>.
To answer your question, the expression for file in #files itself doesn't return anything worth printing so there's no need to use <%= %> and in fact doing so can cause a hard-to-track-down bug.

Related

What is the - at the <% end -%>? [duplicate]

This question already has answers here:
What is the difference between <%, <%=, <%# and -%> in ERB in Rails?
(7 answers)
Closed 4 years ago.
I am currently learning ruby-on-rails and I noticed in the tutorial I am following that closing the syntax <% end %>.
Out of curiosity, I wanted to know why mine is showing <% end -%> with the minus sign before %. The codes are working just fine with the minus sign?
<% end -%>
is used to avoid line break after expression
<% %> and <%- -%> are the same. however that <%= %> and <%= -%> are different: only the latter removes trailing whitespaces.
Example :
<div>
<%= "Hii" -%>
</div>
It will produce
<div>
Hii</div>
and without '-' :
<div>
Hii
</div>

Difference between <%= ... %> and <% ... %> Ruby on Rails [duplicate]

This question already has answers here:
What is the difference between <%, <%=, <%# and -%> in ERB in Rails?
(7 answers)
Closed 7 years ago.
Could someone explain the difference between using <%= some_ruby_code %> and <% some_other_ruby_code %>
I'm aware that they're not equivalent but can't find a good explanation as to why.
Thanks in advance.
In ERB (Embedded Ruby), using <%= %> will both evaluate and render the evaluated Ruby within your markup, whereas just using <% %> will only evaluate the enclosed expression, and will not print anything to the erb file.
Hope it helps!
In other words, with <%= %> you execute ruby code and print the output. Using <% %> is only necessary to run the ruby code.
To clarify, this is Emebedded Ruby which you use for views pages on Rails. This might helpful for you: https://docs.puppetlabs.com/puppet/latest/reference/lang_template_erb.html

ruby on rails: weird array output [duplicate]

This question already has answers here:
Why am I getting objects printed twice?
(4 answers)
Closed 6 years ago.
I have this code in on of my views
<%= #quotes.each do |f| %>
<%=f[:underwriter]%>: £<%=f[:premium]%>
<br>
<% end %>
And in my controller I pass it the argument
#quotes = [{underwriter:"dtc",premium:500},{underwriter:"abc",premium:800}]
I expect it to print out the underwriter and premium, which it does, however it tags the whole array on at the end for some reason. This is shown below
dtc: £500
abc: £800
[{:underwriter=>"dtc", :premium=>500}, {:underwriter=>"abc", :premium=>800}]
Anyone can enlighten my to what is causing this behaviour?
Just do
<% #quotes.each do |f| %>
<%=f[:underwriter]%>: £<%=f[:premium]%>
<br>
<% end %>
Array#each - Calls the given block once for each element in self, passing that element as a parameter. when iteartion completed, return the self. <%= %> prints what is in between inside the tag into erb file, whereas <% %> executes the ruby code within the brackets.
Check this one Rails, ERB syntax also.

Why many people use "-%>" instead of "%>" in Rails? [duplicate]

This question already has answers here:
What is the difference between <%, <%=, <%# and -%> in ERB in Rails?
(7 answers)
Closed 8 years ago.
Sorry for this question, i think its more offtopic, but i couldn't find anything on google!
I saw now multiple times that a lot of people use -%> instead of just %>. Whats the sense?
Example:
<% #images.each_slice(6) do |slice| -%>
<div class="gallery">
<% slice.each do |image| -%>
<%= image_tag(image.url, :alt => image.alt) %>
<% end -%>
</div>
<% end -%>
Source: Rails each loop insert tag every 6 items?
Here he has also used -%> for all blocks.
I would like to add some resources that I know about ERB :
Rails extends ERB, so that you can suppress the newline simply by adding a trailing hyphen to tags in Rails templates:
<ul>
<% for #item in #items -%>
<li><%= #item %></li>
<% end -%>
</ul>
Comment markers use a hash sign:
<%# This is just a comment %>
A tag with an equals sign indicates that enclosed code is an expression, and that the renderer should substitute the code element with the result of the code (as a string) when it renders the template. Use an expression to embed a line of code into the template, or to display the contents of a variable:
Hello, <%= #name %>.
Today is <%= Time.now.strftime('%A') %>.
With one equal sign the string will be encoded. To avoid encoding, you can use two equals signs (or raw):
Hello, <%== #unencodedOutput %>
Tags without the equals sign denote that the enclosed code is a scriptlet. Each scriptlet is caught and executed, and the final result of the code is then injected in to the output at the point of the scriptlet.
<ul>
<% for #item in #shopping_list %>
<li><%= #item %></li>
<% end %>
</ul>
Scriptlets are most commonly used for embedding loops or conditional logic into templates:
Read An Introduction to ERB Templating to know more.

Ruby on Rails App Displaying Unwanted Data [duplicate]

This question already has answers here:
What is the difference between <%, <%=, <%# and -%> in ERB in Rails?
(7 answers)
Closed 3 years ago.
Whenever the following code runs i get extra output on the page which looks like the garbage on the bottom. I have tried to see if it is in my migrations or function calls, but they all seem to be pretty clean (not much too f.name). If needed I can provide a copy of my migrations and schema.
<%= #subject.Name %>
<%= #subject.formulas.each do |f| %>
<div class="entry">
<h3><%= f.name %></h3>
</div>
<% end %>
The extra output is:
[#<Formula id: 2, name: "Pythagorean Theorem", description: "n any right triangle, the area of the square whose ...", formula: "a^2+b^2=c^2", created_at: "2011-05-17 03:18:44", updated_at: "2011-05-17 03:18:44">]
Change
<%= #subject.formulas.each do |f| %>
to
<% #subject.formulas.each do |f| %>

Resources