Say I've a user model and there are bunch of user info, like email, birthdate, location, telephone number etc.开发者_开发问答
What's the simplest way of hiding the attributes that are blank?
I've doing something like
<% if blog.title.empty? -%>
<p>Body: <%=h blog.body %></p>
<p>Comments: <%=h blog.comments %></p>
<% elsif blog.body.empty? %>
<p>Title: <%=h blog.title %></p>
<p>Comments: <%=h blog.comments %></p>
<% else -%>
<p>Title: <%=h blog.title %></p>
<p>Body: <%=h blog.body %></p>
<% end -%>
Clearly that is one ugly child. Other than using partials to render, is there a trick to only show non blank fields?
I've been trying to write a helpher method to make the view cleaner, but that's even more ugly.
Any help is appreciated.
I would do it like this:
# blog_helper.rb
show_non_blank_field(label, value)
"<p>#{label}: #{h value}</p>" if !value.blank?
end
and then in view:
<%= show_non_blank_field "Body", blog.body %>
and so on...
Of course you can use shorter helper name.
If you want to do it in if-else
way, try this:
<% if !blog.title.blank? -%>
<p>Title: <%=h blog.title %></p>
<% end %>
<% if !blog.body.blank? %>
<p>Body: <%=h blog.body %></p>
<% end %>
<p>Comments: <%=h blog.comments %></p>
show_field_unless_empty(blog, :body, 'Body')
then, in blog_helper.rb
def show_field_unless_empty(model, field, title)
render :partial => 'field', :locals => {:value => model.send(field), :title => title} if model.send(field)
end
then, in _field.html.erb
<p>
<%= title %>:
<%= value %>
</p>
This seems fairly clean to me.
精彩评论