-неопределенный метод `user 'для nil: NilClass - PullRequest
0 голосов
/ 16 января 2019

На действии контроллера update рельсы возвращают следующую ошибку,

undefined method `user' for nil:NilClass

Проблема должна быть в следующем,

def update
  @profile = Profile.find_by(user_id: params[:id])
  if @profile.user == current_user
    @profile.update(profile_params) 
    flash[:info] = "Profile successfully updated" 
  else

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

1 Ответ

0 голосов
/ 16 января 2019

Profile.find_by возвращается nil, то есть: пользователь не найден. Итак, когда вы пытаетесь @profile.user, вы пытаетесь получить доступ к user на nil.

Убедитесь, что профиль существует с user_id, соответствующим params[:id], и что params[:id] не является пустым или нулевым.

Чтобы избавиться от фатальной ошибки, нужно проверить, является ли @profile нулевым или нет, перед его использованием:

def update
  @profile = Profile.find_by(user_id: params[:id])
  if @profile.present? 
    if @profile.user == current_user
      @profile.update(profile_params) 
      flash[:info] = "Profile successfully updated" 
    else
    end
  else
    # Profile not found
  end
end

Или вы можете использовать вариацию взрыва find_by:

Profile.find_by!

Который вызовет исключение, если ничего не будет найдено (из которого вы потом сможете спастись)

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