我刚刚学习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