I have two examples that accomplish the same thing:
<% if @site.addresses %>
<% @site.addresses.each do |address| %>
<p> <%= address.primary_street + ' | ' if address.primary_street.present? -%>
<%= address.secondary_street + ' | ' if address.secondary_street.present? -%>
<%= address.city + ', ' if address.city.present? -%>
<%= address.region -%>
<%= ' ' + address.postal_code if address.postal_code.present? -%></p>
<% end %>
<% end %>
and
<% if @site.addresses %>
<% @site.addresses.each do |address| %>
<p><%= address.primary_street ? address.primary_street + ' | ' : nil -%>
<%= address.secondary_street ? address.secondary_street + ' | ' : nil -%>
<%= address.city ? address.city + ', ' : nil -%>
<%= address.region ? address.region : nil -%>
<%= address.postal_code ? ' ' + address.postal_code : nil -%></p>
<% end %>
<% end %>
They both do exactly what I want, which is output formatted address data from the database. I will have some addresses that don't have street address, some that will have both primary and secondary, etc.
Is there a better, less repetitive way to do this... like the rails way?
For what it is worth this is a rails 4 app.
I suggest method is model.
in addresss.rb
def formatted_address
fa = ""
fa += primary_street ? primary_street + ' | ' : ""
fa += secondary_street ? secondary_street + ' | ' : ""
fa += city ? city + ', ' : ""
fa += region ? region : ""
fa += postal_code ? ' ' + postal_code : ""
fa
end
in view(you don't need to check @site.addresses isNil or isEmpty, because in this case not iterate)
<% @site.addresses.each do |address| %>
<p><%= address.formatted_address %></p>
<% end %>