2011-01-18 9 views
0

새 사용자를 등록하려고 할 때이 오류가 발생합니다. 당신이 주석 이후 말을 자사의 하드,보기 코드를 보지 않고정의되지 않은 메소드 'save'for nil : NilClass

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

''생성에 : 48 응용 프로그램/컨트롤러/users_controller.rb '을하지만,

NoMethodError (정의되지 않은 메서드 작성 save' for nil:NilClass): app/controllers/users_controller.rb:49:in 새보기로 전송되는 @user 개체 (보기에서 되돌아 오는 매개 변수가 사용자 특성으로 양식의 키 값 쌍으로 정의되지 않음)

+0

하지만 User.new (nil)은 nil이되지 않습니다. 모든 속성이 nil로 설정된 사용자가됩니다. – Kunday

+0

그래서 사용자 모델에서 다른 콜백을 사용하여 일부 속성을 미리 작성하고 있습니까? 우리는 당신이 연관된 모델을보고 코드를 볼 필요가 있다고 생각합니다. –

1

@user 변수가 nil이므로 오류가 발생합니다. calling (nil) .save는 실패합니다. 즉, User.new (params [: user])는 아무 일도 일어나지 않아야합니다. User.new는 유효하지 않더라도 항상 레코드를 반환해야합니다.

제어기가 꽤 평범 해 보였으므로 어두운 곳에서 촬영하고 User 모델에서 '새로운'방법을 확인하는 것이 좋습니다. ActiveRecord의 'new'메소드 대신 nil을 리턴하고 컨트롤러를 깨는 로직을 오버라이드 할 수 있습니다. 그렇다면 'def new'를 다른 메소드 이름으로 바꿔야합니다.

그래도 도움이되지 않는 경우 사용자 모델에 코드를 제공해 주시기 바랍니다.

관련 문제