2011-01-06 2 views
0

저장중인 RoR 개체 그래프가 있습니다. 사용자는 섹션 목록을 가지고 있습니다. 요청이 들어 오면 현재 사용자 섹션을 모두 삭제하고 새 섹션을 다시 채 웁니다. 실제로 무슨 일이 일어나고 있는지에RoR 충돌시 저장 "사용자가 개체가없고 사용자가 예상하지 못했습니다."

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 

생각 : 내가 저장할 때

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 

, 나는이 얻을? 저장이 성공적으로 수행됩니다 - db와 모든 것을 만듭니다.

편집 : 예외 (schedule_controller.rb : 32)

+0

ScheduleController의 32 행은 무엇입니까? – Zabba

+0

사용자가 user_section을 가지고 있지 않은 경우 어떻게됩니까? null user_sections를 확인해야 할 필요가있는 것 같습니다. – mossplix

+0

@zabba 그것은 user.save에 대한 호출입니다. – kolosy

답변

0

과 함께 첫 번째 라인을 교체 시도 user.save에 대한 호출입니다 (당신의 오류는 곳이 있다면)

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

그러나 Zabba와 마찬가지로 코드 목록이 도움이 될 것이라고 말했다.

+0

예, 자세한 내용 수정. 예외가 user.save에 대한 호출에 있습니다 – kolosy

+0

사용자가 nil (nil.new_record? 오류에주의하십시오)이기 때문에 실패한 사용자 모델에 대한 콜백이있는 것 같습니다. 주어진 user.points가 오류를 발생시키지 않는다면, UserSection.delete (user.user_sections)를보십시오 : 아마 user_sections 이후에 사용자를 우연히 파기했을 것입니까? –

관련 문제