Показывать только непустые атрибуты для модели в представлениях в Rails - PullRequest
3 голосов
/ 15 апреля 2010

Скажите, что у меня есть модель пользователя, и есть множество пользовательских данных, таких как электронная почта, дата рождения, местоположение, номер телефона и т.д.

Какой самый простой способ скрыть пустые атрибуты?

Я делаю что-то вроде

<% 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 -%> 

Очевидно, это один уродливый ребенок. Есть ли хитрость, чтобы показывать только непустые поля, кроме использования партиалов для рендеринга?

Я пытался написать вспомогательный метод, чтобы сделать представление более чистым, но это еще страшнее.

Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2010

Я бы сделал это так:

# blog_helper.rb
show_non_blank_field(label, value)
  "<p>#{label}: #{h value}</p>" if !value.blank?
end

и затем в поле зрения:

<%= show_non_blank_field "Body", blog.body %>

и так далее ...

Конечно, вы можете использовать более короткое имя помощника.

Если вы хотите сделать это if-else способом, попробуйте это:

<% 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>
0 голосов
/ 15 апреля 2010
show_field_unless_empty(blog, :body, 'Body')

затем в 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

затем в _field.html.erb

<p>
<%= title %>: 
<%= value %>
</p>

Мне это кажется довольно чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...