Ruby 设计:/param登录,给出“未定义的方法字符串化”键`

Ruby 设计:/param登录,给出“未定义的方法字符串化”键`,ruby,ruby-on-rails-3,devise,Ruby,Ruby On Rails 3,Devise,对于/login我的应用程序运行良好,但是对于/login?user=“something”给出500 我正在使用Desive gem routes.rb devise_for :users, :controllers => { :sessions => 'devise/sessions'}, :skip => [:sessions] do get '/login' => "devise/sessions#new", :as => :new_user_ses

对于
/login
我的应用程序运行良好,但是对于
/login?user=“something”
给出500

我正在使用Desive gem

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)

stringify_keys
是Rails混合到Ruby Hash类中的一种方法,因此这里的问题是Desive希望用户参数中的属性-值对散列而不是普通字符串。换句话说,它需要一个用户模型对象,而不仅仅是一个用户名

Rails用于将嵌套属性值对打包到URL查询字符串或HTML表单参数中的约定使用方括号,因此您可能需要类似以下内容:

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

您是否尝试过不带引号的查询字符串?e、 g.
/login?user=something
是的,
/login?user=something
也会出现同样的错误。要解决这个问题,我有overwrite Desive session controller。谢谢@Steve,但是我如何处理这个异常,所以用户无法收到500条消息。我不确定您对
/login?user=something
的响应会发生什么?就设计而言,它的输入是无效的,它只是没有被设计来处理它。如果要更改其行为,则可以重写Desive SessionController并实现所需的任何参数处理。看见