Рассматривали ли вы перевести эту логику в частичное? Кроме того, вы должны использовать новый метод #presence
.
Во-первых, метод:
def site_address(site)
address = [
site.address1.presence,
site.address2.presence
].compact
location = ""
location << site.city << ", " if site.city.present?
location << site.state.statecode if site.state.present?
location << site.zipcode if site.zipcode.present?
render :partial => "shared/site_address",
:locals => { :address_lines => address, :location => location }
end
Тогда частичное:
<address>
<% address_lines.each do |line| %>
<%= line %><br>
<% end %>
<%= location %>
</address>
В общем, использование html_safe
в помощнике - это подсказка о том, что в вашем помощнике вы можете перебраться с HTML-логикой, и что может быть хорошей идеей прибегнуть к механизму шаблонов, который позволяет более легко смешивать статический и динамический контент с хорошей XSS-безопасной семантикой по умолчанию.
Примечание : Если address1
, address2
и т. Д. На самом деле nil
и, возможно, не являются пустой строкой (по крайней мере, я подозреваю, что это верно для site.state), вы не нужно использовать present
вообще. Просто скажите if site.state
и назовите это днем. Методы present
и presence
просто обрабатывают пустые значения, как если бы они были nil
для целей условных выражений.