2012-12-26 78 views
0

對於/login我的應用程序工作正常/登錄,但/login?user="something"giving 500設計:用PARAM給`未定義的方法stringify_keys`

我使用設計的寶石

的routes.rb

devise_for :users, :controllers => { :sessions => 'devise/sessions'}, :skip => [:sessions] do 
    get '/login' => "devise/sessions#new", :as => :new_user_session 
end 

錯誤:

Completed 500 Internal Server Error in 263ms 

NoMethodError (undefined method `stringify_keys' for "\"something\"":String): 


Rendered /usr/local/rvm/gems/ruby-1.9.2-head/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.6ms) 
Rendered /usr/local/rvm/gems/ruby-1.9.2-head/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.7ms) 
Rendered /usr/local/rvm/gems/ruby-1.9.2-head/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (7.9ms) 
+0

你有沒有嘗試過的查詢字符串不帶引號?例如'/ login?user = something' – iain

+0

是的'/ login?user = something'也出現同樣的錯誤 –

+0

解決了這個問題我已經覆蓋了設計會話控制器。 –

回答

1

stringify_keys是Rails與Ruby Hash類混合的一種方法,因此這裏的問題是devise期望用戶參數中的屬性值對的散列而不是普通字符串。換句話說,它期望一個用戶模型對象,而不僅僅是一個用戶名。

Rails會使用包裝嵌套的屬性值對的URL查詢字符串或HTML表單PARAMS公約使用方括號,所以你可能需要的東西是這樣的:

/login?user[name]=someone&user[password]=secret 
+0

謝謝@Steve,但是我該如何處理這個異常,所以用戶無法獲得500條消息。 –

+0

我不確定你對'/ login?user = something'的迴應會發生什麼?就Devise而言,它的無效輸入和它的目的不是爲了處理它。如果你想改變它的行爲,那麼你可以重寫Devise SessionsController並實現你想要的任何參數處理。請參閱http://stackoverflow.com/questions/8070320/rails-3-override-devise-sessions-controller – Steve

相關問題