无法获取会话值

Posted

技术标签:

【中文标题】无法获取会话值【英文标题】:Unable to get session value 【发布时间】:2017-03-11 13:21:44 【问题描述】:

我正在尝试创建一个基于会话值呈现特定视图的应用程序。但是,我无法存储会话值。

我的控制器是这样的:

class MyController < ApplicationController
  def question
    if session[:state].nil?
      session[:state] = 'question_one'
    end
  end

  def next_page
    # state pattern would be much better, this is a bit ugly
    if session[:state].nil? || session[:state] == 'question_one'
      session[:state] = 'question_two'
    elsif session[:state] == 'question_two'
      session[:state] = 'question_one'
    end
  end
end

我的观点是这样的(命名为question.html.erb):

<h1>Question</h1>

<div align="center">
    <% if (session[:state]).to_s == 'question_one' %>
        <%= render partial: 'layouts/question_one' %>
    <% else %>
        <%= render partial: 'layouts/question_two' %>
    <% end %>
</div>

<div class="buttons">
    <%= link_to "Next", question_path, class: "btn btn-large btn-primary" %>
</div>

而在routes.rb 中,question_path 是这样定义的:

resources :question do
    collection do
        get :next_page
    end
end

但是,session[:state] 总是Nil,为什么?

注意:这个问题纯粹是关于 Ruby on Rails 的工作原理,我已经省略了网站本身的大部分细节,只留下了与问题相关的内容。

【问题讨论】:

您如何将resources :question 路由到MyController 而不是QuestionController?您确定在这里点击了正确的控制器操作吗? 【参考方案1】:

不确定您是如何触发 next_page_path 但提供您提供的信息,您可以在问题路径中设置 param[:state] 并以此为基础设置会话。

 def question
  # session[:state] = 'semantic_recognition_state'
  # not sure why you are setting 'semantice_recognition_state' 

  if params[:state].nil? && session[:state].nil?
    session[:state] = 'question_one'
  elsif params[:state].nil? && session[:state].present?
    session[:state]
  else 
    session[:state] = params[:state]
  end
end


<div class="buttons">
  <%= link_to "Next", question_path(state: 'question_two'), class: "btn btn-large btn-primary" %>
  <%= link_to "Back", question_path(state: 'question_one'), class: "btn btn-large btn-primary" %>
</div>

【讨论】:

您需要使用实例变量保存会话,而不是本地变量。 OP 没有将 session 保存到本地变量。同样,一旦定义,session 值就可以跨应用程序访问。

以上是关于无法获取会话值的主要内容,如果未能解决你的问题,请参考以下文章

一旦分配给会话类的属性,就无法检索会话值[关闭]

使用 jquery 设置时无法在 vb 页面上获取会话

如何从不同的会话中获取 Windows 环境变量的当前值

Liferay 7 无法设置全局会话属性

ios/xcode/objective c:设置和获取会话变量[重复]

单选按钮和会话,如何获取值并用作会话变量