Как я могу проверить наличие неопределенного метода для nilClass до того, как произойдет ошибка? - PullRequest
4 голосов
/ 06 октября 2010

В настоящее время я использую следующее:

20:         <p>Status: <%= @contact.try(:status) unless @contact.nil? || @contac
t.status.nil?%></p>

Тем не менее я получаю следующую ошибку:

ActionView::TemplateError (undefined method `status' for nil:NilClass) on line #
20 of app/views/contacts/show.html.erb:

Есть ли лучший способ проверки?

Кажется, это общая проблема - она ​​отлично работает в dev, но я не нахожу ее в производстве ....

Ответы [ 5 ]

8 голосов
/ 06 октября 2010

Используйте утилиту Rails try

<%= @contact.try(:status) %>
1 голос
/ 06 октября 2010

Может быть

<%= @contact.status unless @contact %>

или

<%= @contact && @contact.status %>
0 голосов
/ 06 октября 2010

Попробуйте это

<%= @contact.status unless @contact.status.nil? unless @contact.nil? %>
0 голосов
/ 06 октября 2010

Почему бы не изменить метод getStatus или добавить метод getStatusUI, который очищает данные в контактном объекте? Таким образом, вы можете удалить некоторые из помех в вашем HTML.

0 голосов
/ 06 октября 2010
<%= @contact.status unless @contact.nil? || @contact.status.nil? %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...