2013-05-21 126 views
0
class User < ActiveRecord::Base 
     has_secure_password 
     attr_accessor :account 

     has_one :company 
     has_one :employee 
     has_many :messages 

     def self.authenticate(user, password) 
      user = User.find_by_user(user) 

      unless user && user.authenticate(password) 
       redirect_to new_session_path 
      end 

      user   
     end 

    end 

出於某種原因,我不得到unless條件裏面的代碼不承認任何Rails代碼,就像redirect_to new_session_path或任何其他的路徑,並拋出這樣的:身份驗證has_secure_password和會話

NameError in SessionsController#create

undefined local variable or method "new_session_path" for #<Class:0x2f0e998>

我也嘗試一個raise但同樣的,有人知道爲什麼這樣做呢? 感謝您的幫助。

堆棧跟蹤

activerecord (3.2.1) lib/active_record/dynamic_matchers.rb:50:in "method_missing" 
app/models/user.rb:14:in "authenticate" 
app/controllers/sessions_controller.rb:6:in "create" 
actionpack (3.2.1) lib/action_controller/metal/implicit_render.rb:4:in "send_action" 
actionpack (3.2.1) lib/abstract_controller/base.rb:167:in "process_action" 
actionpack (3.2.1) lib/action_controller/metal/rendering.rb:10:in "process_action" 
actionpack (3.2.1) lib/abstract_controller/callbacks.rb:18:in "block in process_action" 
activesupport (3.2.1) lib/active_support/callbacks.rb:414:in "_run__439917834__process_action__1037818096__callbacks" 
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in "__run_callback" 
activesupport (3.2.1) lib/active_support/callbacks.rb:385:in "_run_process_action_callbacks" 
activesupport (3.2.1) lib/active_support/callbacks.rb:81:in "run_callbacks" 
actionpack (3.2.1) lib/abstract_controller/callbacks.rb:17:in "process_action" 
actionpack (3.2.1) lib/action_controller/metal/rescue.rb:29:in "process_action" 
actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:30:in "block in process_action" 
activesupport (3.2.1) lib/active_support/notifications.rb:123:in "block in instrument" 
activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:20:in "instrument" 
activesupport (3.2.1) lib/active_support/notifications.rb:123:in "instrument" 
actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:29:in "process_action" 
actionpack (3.2.1) lib/action_controller/metal/params_wrapper.rb:205:in "process_action" 
activerecord (3.2.1) lib/active_record/railties/controller_runtime.rb:18:in "process_action" 
actionpack (3.2.1) lib/abstract_controller/base.rb:121:in "process" 
actionpack (3.2.1) lib/abstract_controller/rendering.rb:45:in "process" 
actionpack (3.2.1) lib/action_controller/metal.rb:203:in "dispatch" 
actionpack (3.2.1) lib/action_controller/metal/rack_delegation.rb:14:in "dispatch" 
actionpack (3.2.1) lib/action_controller/metal.rb:246:in "block in action" 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in "call" 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in "dispatch" 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:30:in "call" 
journey (1.0.4) lib/journey/router.rb:68:in "block in call" 
journey (1.0.4) lib/journey/router.rb:56:in "each" 
journey (1.0.4) lib/journey/router.rb:56:in "call" 
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:589:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in "call" 
rack (1.4.5) lib/rack/etag.rb:23:in "call" 
rack (1.4.5) lib/rack/conditionalget.rb:35:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/head.rb:14:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/params_parser.rb:21:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/flash.rb:242:in "call" 
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in "context" 
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/cookies.rb:338:in "call" 
activerecord (3.2.1) lib/active_record/query_cache.rb:64:in "call" 
activerecord (3.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:443:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in "block in call" 
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in "_run__813925422__call__171472149__callbacks" 
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in "__run_callback" 
activesupport (3.2.1) lib/active_support/callbacks.rb:385:in "_run_call_callbacks" 
activesupport (3.2.1) lib/active_support/callbacks.rb:81:in "run_callbacks" 
actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:65:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/remote_ip.rb:31:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:16:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/show_exceptions.rb:56:in "call" 
railties (3.2.1) lib/rails/rack/logger.rb:26:in "call_app" 
railties (3.2.1) lib/rails/rack/logger.rb:16:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/request_id.rb:22:in "call" 
rack (1.4.5) lib/rack/methodoverride.rb:21:in "call" 
rack (1.4.5) lib/rack/runtime.rb:17:in "call" 
activesupport (3.2.1) lib/active_support/cache/strategy/local_cache.rb:72:in "call" 
rack (1.4.5) lib/rack/lock.rb:15:in "call" 
actionpack (3.2.1) lib/action_dispatch/middleware/static.rb:53:in "call" 
railties (3.2.1) lib/rails/engine.rb:479:in "call" 
railties (3.2.1) lib/rails/application.rb:220:in "call" 
rack (1.4.5) lib/rack/content_length.rb:14:in "call" 
railties (3.2.1) lib/rails/rack/log_tailer.rb:14:in "call" 
rack (1.4.5) lib/rack/handler/webrick.rb:59:in "service" 
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in "service" 
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in "run" 
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in "block in start_thread" 

回答

0

模型不應該負責重定向,因爲這是控制器的責任。嘗試將重定向從您的模型中拉出並放入您的控制器中。驗證方法應該驗證用戶是否有效,並讓控制器根據該結果採取適當的措施。

+0

但是那是什麼導致了問題?我明白如果是MVC的一個不好的應用程序,但仍然不知道爲什麼不認識的方法,我將不得不把它放在控制器,但我真的想知道爲什麼會發生.. – user2382595

+0

你會遇到問題,因爲redirect_to並且new_session_path不會在您的作用域中定義。 Sachin.Singh建議包括路由幫助器,它應該允許new_session_path方法的工作,但是你仍然會缺少redirect_to方法,這是一個動作控制器方法。 – Puhlze

+0

謝謝你的解釋! – user2382595

0

寫在你的用戶模型。

include Rails.application.routes.url_helpers 

,或者

使用,而不是new_session_path

Rails.application.routes.url_helpers.new_session_path 
+0

感謝但還沒有工作,出於某種原因,現在我得到這個:'SystemStackError在SessionsController#新''堆棧級別太深' – user2382595

+0

你能告訴我堆棧跟蹤? –

+0

我只看到應用程序跟蹤,框架跟蹤,完整跟蹤抱歉,但不知道如何獲取堆棧跟蹤。 – user2382595