ActionMailer view template:


#1

I am attempting to generate a plain text list from an array of arrays.

If I do this:

<% for currency in @rates -%>
<% if currency[2] == ‘USD’ -%>
<%= currency[2] -%> … <%= currency[4] %>
<% end -%>
<% end -%>

Then I see this:

                                                                     =
                              USD ............... 1.203804
          =

If I do this:

<% for currency in @rates -%>
<%= currency[2] -%> … <%= currency[4] %>
<% end -%>

Then I see this:

 AED ............... 0.327697
 ANG ............... 0.6879
 ARS ............... 0.324296
 AUD ............... 0.869868

How is the if statement causing the difference?


#2

James B. wrote:

The problem occurs even if the output line is a literal:

<% if true -%>
<%= “print this” %>
<% end -%>

<% for currency in @rates -%>
<% if currency[2] == ‘USD’ -%>
<%= “print this” %>
<% end -%>
<% end -%>

gives this:

print this

                                                                     =
                             print this
          =

#3

You are still getting all the indentation from the iterations that are
skipped (i.e., where the currency is not USD).

<% for currency in @rates -%>
<% next unless currency[2] == ‘USD’ -%>
<%= currency[2] %> … <%= currency[4] %>
<% end -%>

I’m not sure you need the minus sign on an emitting tag (<%=) to
suppress the linefeed.

Does this help?


#4

Steve R. wrote:

You are still getting all the indentation from the iterations that are
skipped (i.e., where the currency is not USD).

<% for currency in @rates -%>
<% next unless currency[2] == ‘USD’ -%>
<%= currency[2] %> … <%= currency[4] %>
<% end -%>

I’m not sure you need the minus sign on an emitting tag (<%=) to
suppress the linefeed.

Does this help?

Yes. Now that I know what is going on this works as I wish:

<% for currency in @rates
usdd = “#{currency[2]} … #{currency[4]}” if
currency[2] == ‘USD’
end -%>

  <%=usdd%>