NoMethodError в Users # показывает неопределенный метод `username 'для nil: NilClass - PullRequest
0 голосов
/ 01 октября 2018

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

Вот мой код:

user_controller.rb:

class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update, :destroy]
before_action :require_same_user, only: [:edit, :update]
  def index
    @users = User.all
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      session[:user_id] = @user.id
      flash[:success] = "Welcome to Alphablog, #{@user.username}"
      redirect_to user_path(@user)
    else
      render 'new'
    end
  end

  def edit
  end

  def update
    if @user.update(user_params)
      flash[:success] = "Your account has been successfully updated"
      redirect_to user_path(@user)
    else
      render 'edit'
    end
  end

  def show
  end

  private
  def user_params
    params.require(:user).permit(:username, :email, :password)
  end

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

  def require_same_user
    if current_user != @user
      flash[:danger] = "You can only edit your own account"
      redirect_to root_path
    end
  end
end

Проблема, кажется, в: users / show.html.erb, где имя пользователя в @ user.username, кажется, не работает.Не уверен почему.Пересмотрел весь мой код, но безрезультатно.

<h1 align="center">Welcome to <%= @user.username %>'s page</h1>
<h4 align="center"><%= @user.username %>'s articles</h4>
<%= render 'articles/article', obj: @user.articles %>

Пожалуйста, помогите.

Спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

@user - это nil в вашем представлении.Вы не вызываете set_user или иным образом не заполняете эту переменную, поэтому нет возможности ее установить.Возможно, вы захотите включить :show в список действий, которые вы выполняете set_user для:

before_action :set_user, only: [:edit, :update, :destroy]

должно стать

before_action :set_user, only: [:show, :edit, :update, :destroy]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...