UsersController中的ActionController :: ParameterMissing #show

时间:2015-11-27 05:41:43

标签: ruby-on-rails ruby ruby-on-rails-4

我希望用户注册该应用程序,但我在下面显示此错误,

ActionController::ParameterMissing in UsersController#show
param is missing or the value is empty: user

users_controller.rb



def show
  @user = User.new(user_params)
end

def new
  @user = User.new
end

def create
  @user = User.new(user_params)
  if @user.save
    flash[:success] = "Welcome to the Sample App!"
    redirect_to @user
  else
    render 'new'
  end
end

private

def user_params
  params.require(:user).permit(:name, :email, :password, :password_confirmation)
end




2 个答案:

答案 0 :(得分:2)

当您在user_params操作中调用show方法时,需要user参数存在于params哈希中。但是,对于show操作的相应请求,它并不存在。这就是你提到错误的原因:

param is missing or the value is empty: user

要解决您的问题,请将show方法更改为:

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

这只是从id哈希中抓取用户的params,然后使用User.find调用从数据库中找到该用户。

答案 1 :(得分:1)

这是因为你在show action时调用了user_params。 Normaly请求显示动作只有一个参数是用户的id。在这里你调用user_params它将搜索params对应的用户模型属性然后将它们转换为新方法,但它们不存在。因此它会给你带来错误。 我认为在show动作中你只会写: def show @user = User.find params[:id] @new_user = User.new #if you need create 1 form at show view end