0

新しいユーザーを登録しようとすると、このエラーが発生します。

NoMethodError (未定義のメソッドsave' for nil:NilClass): app/controllers/users_controller.rb:49:increate' app/controllers/users_controller.rb:48:in `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
4

2 に答える 2

1

ビューのコードを見ずに言うのは難しいですが、新しいビューに送信されるオブジェクトをコメントアウトしたため@user、ビューから返されるパラメーターは、ユーザー属性としてフォームからのキーと値のペアとして定義されていない可能性がありますか?

于 2011-01-18T02:16:16.200 に答える
1

@user 変数が nil であるためエラーが発生しているため、(nil).save の呼び出しは失敗します。これは、User.new(params[:user]) が nil を返すことを意味しますが、これは決して起こらないはずです。User.new は、無効であっても常にレコードを返す必要があります。

コントローラーはかなり普通に見えるので、暗闇の中でショットを撮り、「新しい」メソッドのユーザー モデルをチェックすることをお勧めします。nil を返し、コントローラーを壊すロジックで ActiveRecord の 'new' メソッドをオーバーライドしている可能性があります。その場合は、'def new' を別のメソッド名に置き換える必要があります。

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

于 2011-01-18T05:49:32.400 に答える