1

На моей странице профиля пользователя в моей рельсы приложение, я ПОЛУЧАТЬ ошибку:Почему я получаю неопределенную ошибку метода в рельсах после проверки, существует ли метод?

undefined method `title' for nil:NilClass 

Я знаю, что это из-за следующих 3-х строк кода:

<% if @user.profile.title %> 
    <%= @user.profile.title %> 
<% end %> 

Я не понимаю Зачем. Поскольку я использую оператор if, не следует сначала проверять, существует ли название, а затем, если он существует, отображает его, а если он не существует, он не должен отображать его. Что не так, и как я могу это исправить? Благодарю.

ответ

3

С title нет, вы не можете протестировать против него, как вы. Попытка:

<% if @user.profile.try(:title) @user.profile.title %> 
+2

Я думаю, вы можете упростить это до '<% = @ user.profile.try (: title)%> ' –

+1

Просто делал это, когда вы прокомментировали;) – Leon

+0

Несколько пунктов, которые нужно отметить здесь: здесь нет« названия », это профиль. Во-вторых, ваше решение не распечатывает заголовок, решение @ DamienRoche. Предложите изменить свой ответ. – vee

0

Потому что это неверно. Если вы хотите получить доступ к некоторому параметру от пользователя, вам нужно использовать прямой доступ. Но если вы хотите использовать профиль, который принадлежит к модели пользователя, взгляните на link

3

Вы можете сделать:

<% if @user.profile.present? %> 
    <%= @user.profile.title %> 
<% end %> 

Или с попытки:

<%= @user.profile.try(:name) %> 

со значением по умолчанию, если профиль связанные:

<%= @user.profile.try(:name) || 'No profile for this user' %> 
+0

Спасибо. Ваш ответ был верным, но Леонид был прав и ответил первым. Но я проголосовал за ваш ответ. – Philip7899