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!
Который вызовет исключение, если ничего не будет найдено (из которого вы потом сможете спастись)