简体   繁体   English

nil:NilClass的未定义方法“保存”

[英]undefined method `save' for nil:NilClass

I get this error when trying to register a new user. 尝试注册新用户时出现此错误。

NoMethodError (undefined method save' for nil:NilClass): app/controllers/users_controller.rb:49:in create' app/controllers/users_controller.rb:48:in `create' NoMethodError( save' for nil:NilClass): app/controllers/users_controller.rb:49:in未定义方法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

看不到视图代码,这很难说,但是由于注释掉了发送到新视图的@user对象,因此可能不会将视图返回的参数定义为用户属性表单中的键值对?

The error is happening because the @user variable is nil, so calling (nil).save will fail. 由于@user变量为nil,因此发生错误,因此调用(nil).save将失败。 This means that User.new(params[:user]) is returning nil, which should never happen. 这意味着User.new(params [:user])返回nil,这永远不会发生。 User.new should always return a record, even if it is invalid. 即使无效,User.new也应始终返回一条记录。

So, since the controller looks pretty ordinary, I'll take a shot in the dark and suggest checking your User model for a 'new' method. 因此,由于控制器看起来很普通,因此我将在黑暗中进行拍摄,并建议检查您的User模型中是否有“新”方法。 You might be overriding ActiveRecord's 'new' method with some logic that returns nil and breaks your controller. 您可能会使用一些返回nil并破坏控制器的逻辑来覆盖ActiveRecord的“ new”方法。 If so, you must replace 'def new' with a different method name. 如果是这样,则必须使用其他方法名称替换“ def new”。

If that doesn't help, please provide us with the code in your User model. 如果这样做没有帮助,请向我们提供您的用户模型中的代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM