2011-01-06 13 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 

、私はこれを取得しますか?保存が正常に行われた - データベースとすべてにそれを行います。

編集:例外(schedule_controller.rb:32)(あなたのエラーがどこにあるようだ場合)との最初の行を交換してみてください

+0

ScheduleControllerの32行目は何ですか? – Zabba

+0

ユーザーにuser_sectionsがないとどうなりますか? 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の後でuserが誤って破棄されている可能性がありますか? –

関連する問題