我剛剛學習RoR並遇到了我的第一個真正的bug。真的很感謝它的一些指導。我正在爲我正在構建的網站創建用戶登錄/註銷功能,這些功能將通過會話進行維護。當表單中的登錄提交給會話控制器時,會調用'create'方法。這樣做時它會顯示這個錯誤:Ruby on Rails中的NoMethodError從控制器調用Class方法
NoMethodError in SessionsController#create
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.[]
下面是創建方法的代碼:
33 def create
34 user = User.authenticate(params[:session][:email],
35 params[:session][:password])
36 if user.nil?
37 flash.now[:error] = "Invalid email/password combination."
38 @title = "Sign in"
39 render 'new'
40 else
41 sign_in user
42 redirect_back_or user
43 end
44 end
應用程序跟蹤說,錯誤是在
應用程序/控制器/ sessions_controller.rb :34:在'創建'
所以這個問題似乎與驗證方法。這是爲我的用戶對象定義的類方法。有什麼奇怪的是,我在rails控制檯中測試了這個方法,它工作正常。以下是完整的跟蹤。再次將非常感謝一些幫助。謝謝。
跟蹤:
app/controllers/sessions_controller.rb:34:in
create' actionpack (3.0.4) lib/action_controller/metal/implicit_render.rb:4:in
send_action' actionpack (3.0.4) lib/abstract_controller/base.rb:150:inprocess_action' actionpack (3.0.4) lib/action_controller/metal/rendering.rb:11:in
process_action' actionpack (3.0.4) lib/abstract_controller/callbacks.rb:18:inblock in process_action' activesupport (3.0.4) lib/active_support/callbacks.rb:435:in
run_4224187041876590211__process_action_3718750575726612430_callbacks' activesupport (3.0.4) lib/active_support/callbacks.rb:409:in_run_process_action_callbacks' activesupport (3.0.4) lib/active_support/callbacks.rb:93:in
run_callbacks' actionpack (3.0.4) lib/abstract_controller/callbacks.rb:17:inprocess_action' actionpack (3.0.4) lib/action_controller/metal/instrumentation.rb:30:in
block in process_action' activesupport (3.0.4) lib/active_support/notifications.rb:52:inblock in instrument' activesupport (3.0.4) lib/active_support/notifications/instrumenter.rb:21:in
instrument' activesupport (3.0.4) lib/active_support/notifications.rb:52:ininstrument' actionpack (3.0.4) lib/action_controller/metal/instrumentation.rb:29:in
process_action' actionpack (3.0.4) lib/action_controller/metal/rescue.rb:17:inprocess_action' actionpack (3.0.4) lib/abstract_controller/base.rb:119:in
process' actionpack (3.0.4) lib/abstract_controller/rendering.rb:41:inprocess' actionpack (3.0.4) lib/action_controller/metal.rb:138:in
dispatch' actionpack (3.0.4) lib/action_controller/metal/rack_delegation.rb:14:indispatch' actionpack (3.0.4) lib/action_controller/metal.rb:178:in
block in action' actionpack (3.0.4) lib/action_dispatch/routing/route_set.rb:62:incall' actionpack (3.0.4) lib/action_dispatch/routing/route_set.rb:62:in
dispatch' actionpack (3.0.4) lib/action_dispatch/routing/route_set.rb:27:incall' rack-mount (0.6.14) lib/rack/mount/route_set.rb:148:in
block in call' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:93:inblock in recognize' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:68:in
optimized_each' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:92:inrecognize' rack-mount (0.6.14) lib/rack/mount/route_set.rb:139:in
call' actionpack (3.0.4) lib/action_dispatch/routing/route_set.rb:492:incall' actionpack (3.0.4) lib/action_dispatch/middleware/best_standards_support.rb:17:in
call' actionpack (3.0.4) lib/action_dispatch/middleware/head.rb:14:incall' rack (1.2.2) lib/rack/methodoverride.rb:24:in
call' actionpack (3.0.4) lib/action_dispatch/middleware/params_parser.rb:21:incall' actionpack (3.0.4) lib/action_dispatch/middleware/flash.rb:182:in
call' actionpack (3.0.4) lib/action_dispatch/middleware/session/abstract_store.rb:149:incall' actionpack (3.0.4) lib/action_dispatch/middleware/cookies.rb:302:in
call' activerecord (3.0.4) lib/active_record/query_cache.rb:32:inblock in call' activerecord (3.0.4) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in
cache' activerecord (3.0.4) lib/active_record/query_cache.rb:12:incache' activerecord (3.0.4) lib/active_record/query_cache.rb:31:in
call' activerecord (3.0.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:354:incall' actionpack (3.0.4) lib/action_dispatch/middleware/callbacks.rb:46:in
block in call' activesupport (3.0.4) lib/active_support/callbacks.rb:415:in_run_call_callbacks' actionpack (3.0.4) lib/action_dispatch/middleware/callbacks.rb:44:in
call' rack (1.2.2) lib/rack/sendfile.rb:107:incall' actionpack (3.0.4) lib/action_dispatch/middleware/remote_ip.rb:48:in
call' actionpack (3.0.4) lib/action_dispatch/middleware/show_exceptions.rb:47:incall' railties (3.0.4) lib/rails/rack/logger.rb:13:in
call' rack (1.2.2) lib/rack/runtime.rb:17:incall' activesupport (3.0.4) lib/active_support/cache/strategy/local_cache.rb:72:in
call' rack (1.2.2) lib/rack/lock.rb:11:inblock in call' <internal:prelude>:10:in
synchronize' rack (1.2.2) lib/rack/lock.rb:11:incall' actionpack (3.0.4) lib/action_dispatch/middleware/static.rb:30:in
call' railties (3.0.4) lib/rails/application.rb:168:incall' railties (3.0.4) lib/rails/application.rb:77:in
method_missing' railties (3.0.4) lib/rails/rack/log_tailer.rb:14:incall' rack (1.2.2) lib/rack/content_length.rb:13:in
call' rack (1.2.2) lib/rack/handler/webrick.rb:52:inservice' /Users/USERNAME_REMOVED/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/httpserver.rb:111:in
service' /Users/USERNAME_REMOVED/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/httpserver.rb:70:inrun' /Users/USERNAME_REMOVED/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/webrick/server.rb:183:in
block in start_thread'
顯示你的用戶模型 – 2011-05-03 20:58:19
啊沒有意識到你應該這樣做。通過我的答案,並解決這個問題。 – tks 2011-05-03 20:59:56
檢查params [:session]的值。它實際上是一個數組嗎?我懷疑它是零。併發布發佈到此操作的表單。 – Thilo 2011-05-03 21:13:40