我在登录表单上创建了一个隐藏字段,其中包含用户时区,现在我想在该用户会话上设置它。我正在使用设计进行身份验证。params[:hiddenfieldname]
在我将用户重定向到主页的控制器中无法访问使用值时。请告诉我我缺少哪些步骤。
问问题
805 次
1 回答
1
我认为问题中没有足够的信息来提供明确的答案;如果没有,请发布您拥有的不起作用的代码。这是我的猜测...
当您使用 Devise 登录(或注销)时,这些操作由 Devise::SessionController 管理。在用户登录后,该控制器的一部分将用户重定向到一个位置(默认情况下是家),此时params
阵列被清除。
您需要在代码中覆盖该控制器的相关方法,以便params
在 Devise 登录过程的其余部分运行之前将时区的值捕获到会话中。就像是
class DeviseCustom::SessionsController < Devise::SessionsController
def create
session[:user_timezone] = params[:hiddenfieldname]
super
end
end
此代码将存在apps/controllers/devise_custom/session_controller.rb
于您的项目中。
编辑:您还需要更新routes.rb
以指定新控制器的自定义路径,如下所示
devise_for :users, :controllers => {
:sessions => "devise_custom/sessions",
}
于 2012-11-19T19:37:12.973 回答