ERb部分中的条件行间距

时间:2014-08-15 00:51:38

标签: ruby-on-rails escaping erb

这是我刚写的地址部分的代码。人们可能会将单行地址放在街道上,公司名称是可选的等等......它的工作方式正是我想要的,但我知道检查每个变量两次是丑陋可怕的。

 <%= "#{a.name}" unless a.name.blank? %>
 <% unless a.name.blank? %> <br> <% end %>

 <%= "#{a.company_name}" unless a.company_name.blank? %>
 <% unless a.company_name.blank? %> <br> <% end %>

 <%= "#{a.street_1}" unless a.street_1.blank? %>
 <% unless a.street_1.blank? %> <br> <% end %>

 <%= "#{a.street_2}" unless a.street_2.blank? %>
 <% unless a.street_2.blank? %> <br> <% end %>

 <%= "#{a.city}, #{a.state} &nbsp; #{a.zip}" %>

所以,我的无偿使用除非另外,我应该如何处理有条件的换行?

更新

如下所述,在用户输入上使用.html_safe是危险的。如果您确实使用了下面建议的帮助方法,则还必须在进入数据库的过程中清理所有用户输入。我已将上面的代码重写为:

<% unless a.name.blank? %>
  <%= a.name %>
  <br>
<% end %>

<% unless a.company_name.blank? %>
  <%= a.company_name %>
  <br>    
<% end %>        

<% unless a.street_1.blank? %>
  <%= a.street_1 %>
  <br>               
<% end %>

<% unless a.street_2.blank? %>
  <%= a.street_2 %> 
  <br>               
<% end %>

<%= "#{a.city}, #{a.state}" %> &nbsp; <%= a.zip %>

冗余检查只是让我过于复杂。我强烈建议不要在这种情况下使用.html_safe,因为你为自己创造了新的问题:清理输入,并记住哪些字段是安全的。最好不要覆盖Rails提供的合理保护。

1 个答案:

答案 0 :(得分:0)

有许多方法可以清理它,但是这里有一个帮手:

module ApplicationHelper
  def format_address(a)
    top = [a.name, a.company_name, a.street_1, a.street_2]
    top.reject! {|s| s.blank?} # remove null and empty values

    "#{top.join('<br/>')}#{a.city}, #{a.state} &nbsp; #{a.zip}".html_safe
  end
end 

然后在你看来:

<%= format_address(a) %>