不要在rails4中显示空字段

时间:2015-02-01 08:53:07

标签: ruby ruby-on-rails-4

<p>
  <% if @person.name %>
    <strong>Name:</strong>
    <%= @person.name %>
  <% end %>
</p>

<p>
  <% if @person.gender %>
    <strong>Gender:</strong>
    <%= @person.gender %>
  <% end %>
</p>

<p>
  <% unless @person.age.blank? %>
    <strong>Age:</strong>
    <%= @person.age %>
  <% end %>
</p>

<p>
  <% unless @person.address.blank? %>
    <strong>Address:</strong>
    <%= @person.address %>
  <% end %>
</p>

此代码工作正常。它没有显示空白字段,但我想知道有没有其他方法可以这样做。因为在这里我一次又一次地重复相同类型的代码。我可以使用任何停止显示空字段的helper吗?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,“最佳”取决于你的情况。只要标签始终与属性相同,您可以采用的一种方式是简单的部分:

#person/_attribute.html.erb    

<% if @person.public_send attribute != nil %>
  <strong><%= attribute.to_s.capitalize %></strong>
  <%= @person.public_send attribute %>
<% end %>

这将使您的视图看起来像这样:

<p>
  <%= render 'attribute' :attribute => :name %>
</p>

<p>
  <%= render 'attribute' :attribute => :gender %>
</p>

<p>
  <%= render 'attribute' :attribute => :age %>
</p>

<p>
  <%= render 'attribute' :attribute => :address %>
</p>

我必须借此机会向你传播HAML - 您的代码可能看起来像这样!

#person/_attribute.haml

- if @person.public_send attribute != nil
  %strong= attribute.to_s.capitalize
  = @person.public_send attribute

#person/show.haml

%p= render 'attribute' :attribute => :name 
%p= render 'attribute' :attribute => :gender 
%p= render 'attribute' :attribute => :age
%p= render 'attribute' :attribute => :address