2011-01-06 5 views
0

Ich habe eine RoR-Objektgrafik, die ich speichere. Benutzer hat eine Liste von Abschnitten. Wenn eine Anfrage eingeht, lösche ich alle aktuellen Benutzerbereiche und befülle sie mit neuen.RoR Absturz beim Speichern "Sie haben ein Null-Objekt und Sie haben es nicht erwartet"

def set_current 
    @courses = params[:courses] 
    user = current_user 
    user.points = params[:points].nil? ? user.points : params[:points].to_i 
    UserSection.delete(user.user_sections) 
    @courses.each do |c| 
    new_section = UserSection.new() 
    new_section.user = user 

    new_section.save 
    end 
    user.save 

    head :ok 
end 

, wenn ich sparen, bekomme ich diese:

NoMethodError (You have a nil object when you didn't expect it! 
You might have expected an instance of ActiveRecord::Base. 
The error occurred while evaluating nil.new_record?): 
    app/controllers/schedule_controller.rb:32:in `set_current' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:in `start' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:95:in `start' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:in `each' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:92:in `start' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:23:in `start' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/1.8/webrick/server.rb:82:in `start' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.6/bin/rdebug-ide:82 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/lib/ruby/gems/1.8/gems/ruby-debug-ide-0.4.6/bin/rdebug-ide:19:in `load' 
    /Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ruby/jruby-1.5.1/bin/rdebug-ide:19 

Gedanken auf, was auf eigentlich los? Das Speichern geschieht erfolgreich - macht es zur db und zu allem.

bearbeiten: die Ausnahme (schedule_controller.rb: 32) ist der Aufruf mit

+0

Was ist in Zeile 32 des ScheduleControllers? – Zabba

+0

Was passiert, wenn der Benutzer keine user_sections hat? Es scheint, dass Sie auf null user_sections überprüfen müssen. – mossplix

+0

@zabba es ist der Aufruf an user.save – kolosy

Antwort

0

Versuchen Sie, die erste Zeile ersetzt user.save (wenn das ist, wo Ihr Fehler ist)

UserSection.delete(user.user_sections) if user.user_sections 

Aber wie Zabba sagte, würden Codelisten hilfreich sein.

+0

ja, für mehr Details bearbeitet. Die Ausnahme ist auf den Aufruf von user.save – kolosy

+0

Es scheint, Sie haben Callbacks auf Ihrem Benutzermodell, die fehlschlagen, weil Benutzer null ist (beachten Sie den Fehler nil.new_record?). Gegeben Benutzer.Punkte verursacht keinen Fehler, schauen Sie in UserSection.delete (user.user_sections): vielleicht zerstören Sie versehentlich Benutzer nach user_sections? –

Verwandte Themen