尝试注册新用户时出现此错误。
NoMethodError(未定义的方法save' for nil:NilClass):
app/controllers/users_controller.rb:49:in
创建'
app / controllers / users_controller.rb:48:在'create'
class UsersController < ApplicationController
before_filter :require_no_user, :only => [:new, :create]
before_filter :require_user, :only => [:show, :edit, :update]
#filter_resource_access
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
end
end
def show
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @user }
end
end
def new
#@user = User.new
@carriers = Carrier.find(:all)
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @user }
end
end
def edit
end
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Account registered!"
redirect_back_or_default account_url
else
render :action => :new
end
end
def profile
@user = User.find(params[:id])
end
def update
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
respond_to do |format|
format.html { redirect_to(users_url) }
format.xml { head :ok }
end
end
def delete
@user = User.find(params[:user_id])
@user.destroy
redirect_to :users
end
end
答案 0 :(得分:1)
没有看到您的视图代码,很难说,但由于您已注释掉发送到新视图的@user
对象,因此从视图返回的参数可能未被定义为键值对从表单作为用户属性?
答案 1 :(得分:1)
发生错误是因为@user变量为nil,因此调用(nil).save将失败。这意味着User.new(params [:user])返回nil,这应该永远不会发生。 User.new应始终返回记录,即使它是无效的。
所以,由于控制器看起来很普通,我会在黑暗中拍摄并建议检查你的用户模型以寻找“新”方法。您可能会使用某些返回nil并破坏控制器的逻辑覆盖ActiveRecord的“新”方法。如果是这样,您必须使用不同的方法名称替换'def new'。
如果这样做无效,请向我们提供您的用户模型中的代码。