Почему я получил "неопределенный метод"? - PullRequest
0 голосов
/ 27 марта 2011

У меня есть модель профиля и пользователь has_one.

Вот мой маршрут:

resources :users
resources :profiles

Вот метод show в моем контроллере:

def show
  @profile = @user.profile
end

Почему я получаю эту ошибку, когда пытаюсь получить доступ к представлению шоу:

NoMethodError in ProfilesController#show

undefined method `profile' for nil:NilClass

Ответы [ 3 ]

1 голос
/ 27 марта 2011

Вам нужно инициализировать переменную экземпляра @user.Вы, вероятно, захотите сделать что-то вроде этого:

def show
  @user = User.find(params[:id])
  @profile = @user.profile
end

Скучное объяснение: Переменные экземпляра (те, что с @ спереди) по умолчанию nil.Их можно де-факто «создать», просто присвоив ему ненулевое значение.Здесь @user является переменной экземпляра, и она указывает на ноль, потому что ей ничего не было назначено.profile вызывается в контексте nil, который не имеет метода profile, поэтому вы получаете исключение no method.Это в отличие от локальных переменных, начиная с буквы в нижнем регистре, которая в этом случае вызвала бы исключение локальной переменной, не найденной.

0 голосов
/ 27 марта 2011

Это потому, что @user равен нулю, вам нужно что-то вроде этого

def show
  @user = User.find(params[:id]) 
  @profile = @user.profile
end
0 голосов
/ 27 марта 2011

Потому что @user объект nil?Вы заполнили @user переменную экземпляра, прежде чем пытаться ее использовать?

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