Rails View: идиоматический способ показать описание для объекта ассоциации, который может быть нулевым? - PullRequest
1 голос
/ 06 апреля 2011

Модель Member принадлежит_ к Discipline, т. Е. Пользователь может иметь дисциплину, но это необязательно.

Мне интересно, каким будет идиоматический способ Rails показать дисциплину участника, когда я показываю данные пользователя,

Мой первый подход

<b>Discipline:</b>
<%=h @member.discipline.name %>

работает нормально, но не работает с NoMethodError, если дисциплина участника Nil.В этом случае я бы хотел, чтобы там ничего не было.

У меня есть несколько альтернатив:

  • Определить метод Member:discipline_name, который возвращает "", если элемент не имеетдисциплина
  • Ограничить вывод с помощью if;

Альтернатива «если» будет выглядеть примерно так:

<b>Discipline:</b>
<% if @member.discipline %>
<%=h @member.discipline.name %>
<% end %>

Это не очень важное решение, но я бы хотел знать, есть ли «идиоматическое»способ "сделать это или какой-то помощник / что-то или что-то еще, чтобы рассмотреть.

br, Touko

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

На самом деле, развивая ответ Wukerplank дальше, кажется, что следующее работает нормально и довольно кратко:

<b>Discipline:</b>
<%=h @member.discipline.name if @member.discipline %>
2 голосов
/ 06 апреля 2011

Если вам нужно что-то отобразить в случае несуществования, вы можете использовать оператор ternery:

<%= condition ? statement true : statement false %>

<%= @member.discipline ? @member.discipline.name : 'none' %>
2 голосов
/ 06 апреля 2011

На мой взгляд, идиоматический способ будет:

<b>Discipline:</b>
<%=h @member.discipline.name if @member.displince.present? %>
...