2011-01-18 18 views
0

新しいユーザーを登録しようとするとこのエラーが発生します。未定義メソッドnilのための `save ':NilClass

NoMethodError(未定義のメソッドが作成save' for nil:NilClass): app/controllers/users_controller.rb:49:in、ビューのコードを見ることなく

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 
+2

app/models/user.rbからUserモデルクラスを貼り付けることはできますか? – Kunday

答えて

1

を言うのはそのハード ' アプリ/コントローラ/ users_controller.rb: `作成中:48' をしていますが、コメントアウトされているので、新しいビューに送信される@userオブジェクト(ビューから戻ってくるパラメータがフォームからのキー値のペアとして定義されていない可能性があります)

+0

しかし、それはUser.new(nil)をnilにしません。これは、すべての属性がnilに設定されているユーザーになります。 – Kunday

+0

だから、いくつかの属性を事前にビルドするために、ユーザーモデル上で他のコールバックを使用していますか?私はあなたの関連モデルとビューコードを見る必要があると思います。 –

1

@user変数がnilなのでエラーが発生しています呼び出し(nil).saveは失敗します。これは、User.new(params [:user] )は何も起こるべきではないnilを返す。 User.newは、無効な場合でも常にレコードを返す必要があります。

コントローラーがかなり普通に見えるので、私は暗闇の中で撮影し、Userモデルで「新しい」方法を確認することをお勧めします。 ActiveRecordの 'new'メソッドをオーバーライドして、nilを返してコントローラを壊すロジックがあるかもしれません。その場合は、 'def new'を別のメソッド名に置き換える必要があります。

それでも問題が解決しない場合は、ユーザーモデルにコードをご提供ください。

関連する問題