Users#show NoilError中的NoMethodError表示nil:NilClass的未定义方法“用户名”

时间:2018-10-01 14:17:26

标签: ruby-on-rails

我这个问题已经困扰了一段时间。我正在建立一个包含用户和文章的博客。至此,已经创建了用户和文章,并添加了注册,登录和注销功能。

这是我的代码:

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 :(得分:0)

在显示视图中,

@usernil。您没有调用set_user或以其他方式填充该变量,因此无法对其进行设置。您可能希望将:show包含在您为以下各项运行的set_user动作列表中:

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

应该成为

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