这是我刚写的地址部分的代码。人们可能会将单行地址放在街道上,公司名称是可选的等等......它的工作方式正是我想要的,但我知道检查每个变量两次是丑陋可怕的。
<%= "#{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} #{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}" %> <%= a.zip %>
冗余检查只是让我过于复杂。我强烈建议不要在这种情况下使用.html_safe,因为你为自己创造了新的问题:清理输入,并记住哪些字段是安全的。最好不要覆盖Rails提供的合理保护。
答案 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} #{a.zip}".html_safe
end
end
然后在你看来:
<%= format_address(a) %>