2011-01-18 3 views
0

Я получаю эту ошибку при попытке зарегистрировать нового пользователя.undefined метод `save 'for nil: NilClass

NoMethodError (не определен метод save' for nil:NilClass): app/controllers/users_controller.rb:49:in создать ' приложение/контроллеры/users_controller.rb: 48: в `создать'

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

Можете ли вы вставить класс модели пользователя из приложения/models/user.rb? – Kunday

ответ

1

не видя вид кода, его трудно сказать, но так как вы закомментирована объект @user, который отправляется на новое представление, возможно, параметры, возвращающиеся из представления, не определяются как пары значений ключа из формы как атрибуты пользователя?

+0

, но это не сделает User.new (nil) равным нулю. Это был бы Пользователь со всеми атрибутами, установленными в nil. – Kunday

+0

Итак, используете ли вы другие обратные вызовы в пользовательской модели для предварительной сборки некоторых атрибутов? Я думаю, нам нужно будет увидеть вашу связанную модель и просмотреть код. –

1

Ошибка происходит из-за того, что переменная @user равна нулю, поэтому вызов (nil) .save не будет выполнен. Это означает, что User.new (params [: user]) возвращает ноль, чего никогда не должно было случиться. User.new всегда должен возвращать запись, даже если она недействительна.

Итак, поскольку контроллер выглядит довольно обычным, я сделаю снимок в темноте и предлагаю проверить модель пользователя для «нового» метода. Вы можете переопределить «новый» метод ActiveRecord с некоторой логикой, которая возвращает nil и разбивает ваш контроллер. Если это так, вы должны заменить 'def new' на другое имя метода.

Если это не поможет, предоставьте нам код в вашей модели пользователя.