使用ruby on rails上的设计在会话中设置用户的时区

时间:2012-11-19 13:21:50

标签: ruby-on-rails ruby-on-rails-3 devise timezone

我在登录表单上创建了一个包含用户时区的隐藏字段,现在我想在该用户会话上设置它。我正在使用设计进行身份验证。在我将用户重定向到主页的控制器中无法访问params[:hiddenfieldname]时使用的值。请告诉我我缺少的步骤。

1 个答案:

答案 0 :(得分:1)

我认为问题中没有足够的信息来提供明确的答案;如果没有,请发布您无法使用的代码。这是我的猜测......

使用Devise登录(或退出)时,这些操作由Devise :: SessionController管理。在记录用户之后,该控制器的一部分将用户重定向到某个位置(默认为home),此时params阵列将被清除。

您需要在代码中覆盖该控制器的相关方法,以便在运行Devise登录进程的其余部分之前,可以将params中的时区值捕获​​到会话中。像

这样的东西
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",
}