在轨道上使用Ruby中的设计设置会话中的用户时区



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

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

当您使用 Devise 登录(或注销)时,这些操作由 Devise::SessionController 管理。 用户登录后,该控制器的一部分会将用户重定向到某个位置(默认情况下为主页),此时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",
}

相关内容

  • 没有找到相关文章

最新更新