2016-09-07 128 views
0

我有一个会话变量,我想在用户点击设计登录页面时设置。不幸的是,我重定向后它不会生效。相反,我必须刷新页面,然后才能看到新变量。Rails会话变量不会被设置,直到页面重新加载

我已经尝试了几件事情:

首先,我尝试了设置会话变量 session[:theme] = theme

然后我试图删除旧的密钥设置新键:

case theme 
    when 'theme1' 
    session.delete(:theme2) 
    session[:theme1] = true 
    else 
    session.delete(:theme1) 
    session[:theme2] = true 
    end 

两个这些需要在我重定向到登录表单后刷新页面。我的服务器日志显示会话变量正在拾取,但浏览器似乎不想改变它,直到我重新加载。

任何帮助,非常感谢。

回答

0

您需要重写Devise的'SessionsController.new动作来完成此操作。请确保你有这样的事情在config/routes.rb定义:

Rails.application.routes.draw do 
    ... 
    devise_for :users, controllers: {sessions: 'sessions'} 
    ... 
end 

然后在app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController 
    def new 
    super do |resource| 
     session[:my_session_variable] = 'hello world' 
    end 
    end 
end 
相关问题