无法获取会话值
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
值就可以跨应用程序访问。以上是关于无法获取会话值的主要内容,如果未能解决你的问题,请参考以下文章