Ruby on Rails中编辑用户页面出现NoMethodError问题求助
解决NoMethodError: undefined method `errors' for nil:NilClass问题
兄弟,我一眼就揪出问题所在了——你把edit和update这两个控制器action写到private关键字后面了!
在Rails里,控制器的action必须是公开方法,而private之后的方法只能被控制器内部调用(比如你的user_params),不能作为路由对应的action执行。这就导致当你访问用户编辑页面时,edit方法根本没被触发,@user变量完全没初始化,自然是nil。然后你的_errors.html.erb模板里调用obj.errors,就会抛出这个nil:NilClass的错误。
修复步骤
只需要把edit和update方法移到private关键字的上方,确保它们是公开的action方法就行。调整后的UsersController代码应该是这样:
class UsersController < ApplicationController def new @user= User.new end def create @user = User.new(user_params) if @user.save flash[:success] = "Welcome to the alpha blog #{@user.username}" redirect_to articles_path else render 'new' end end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) if @user.update(user_params) flash[:success] = "Your account was updated successfully" redirect_to articles_path else render 'edit' end end private def user_params params.require(:user).permit(:username, :email, :password) end end
为什么这样能解决问题?
把edit和update移到private之前后,它们就变成了控制器的公开方法,当路由匹配到users#edit或users#update时,对应的方法会正常执行,@user变量会被正确初始化并传递给视图模板,_errors.html.erb里的obj(应该是你在_form里传入的@user)就不再是nil,errors方法就能正常调用了。
内容的提问来源于stack exchange,提问作者Yaya M
相关产品推荐
相关产品推荐

