Posted over 2 years ago. Visible to the public. Repeats.

Take care of indentation and blank lines when using .erb for plain text emails

Building plain text emails with an .erb template doesn't allow you to indent code like you normally do in HTML mails.

DON'T

Copy
<%= 'foo' if bar %>

"\n" if bar is false

"foo\n" if bar is true


Copy
<%= nil %>

"\n"


Copy
<% if true %> <%= 'foo' %> <% end %>

" foo"


Copy
<%= 'foo' %> <%= 'bar' %>

"foo\n\nbar\n"

DO

Write unindented code to get the expected result.

Copy
<% if bar %> <%= 'bar' %> <% end %> <%= 'foo' %> <%= 'bar' %>
  • Use Form Models to move logic out of the template.
  • Sometimes it makes sense to use .haml. It helps to write more beautiful code, but makes indentation more difficult.

Understanding trim mode for .erb

.erb has two approaches to handle leading spaces (<%- %>) and trailing newlines (<% -%>).

Copy
ERB.new(" <% %>foo").result => " foo" ERB.new(" <%- %>foo", nil, '-').result => "foo" ERB.new("<% %>\nfoo\n").result => "\nfoo\n" ERB.new("<% -%>\nfoo\n", nil, '-').result => "foo\n"
  • You can combine removing leading spaces and removing trailing newlines.
  • You need to enable trim mode for erb like above: new(str, safe_level=nil, trim_mode=nil, eoutvar='_erbout')

Difference between Rails mailer and ERB

Rails mailer

Copy
<% if true %> <%= 'bar' %> <% end %> <%= 'foo' %> <%= 'bar' %>
Copy
bar foo bar

ERB

Copy
<% if true %> <%= 'bar' %> <% end %> <%= 'foo' %> <%= 'bar' %>
Copy
bar foo bar
Growing Rails Applications in Practice
Check out our new e-book:
Learn to structure large Ruby on Rails codebases with the tools you already know and love.

Owner of this card:

Avatar
Emanuel De
Last edit:
10 months ago
by Judith Roth
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Emanuel De to makandra dev
This website uses cookies to improve usability and analyze traffic.
Accept or learn more