Ruby 如何获取用户定义类型的Rails会话哈希变量来维护它';跨请求输入什么?
Rails V4.2.4。我在Ruby 如何获取用户定义类型的Rails会话哈希变量来维护它';跨请求输入什么?,ruby,session,ruby-on-rails-4,Ruby,Session,Ruby On Rails 4,Rails V4.2.4。我在lib目录下存储了一个用户定义的类型,似乎无法获取该类型的会话变量来跨请求维护它们的类型。起初我认为这可能是因为文件无法在任何地方访问,所以我添加了 config.autoload_路径默认情况下,会话值使用json序列化-无法在json中表示的类型无法还原 Rails过去使用marshal,它允许序列化任何类型(取决于反序列化时类是否可用),但对外部提供的数据进行反序列化是不安全的。会话cookie是经过签名的,因此可以对此提供一些保护,但使用json完全可以避免
lib
目录下存储了一个用户定义的类型,似乎无法获取该类型的会话变量来跨请求维护它们的类型。起初我认为这可能是因为文件无法在任何地方访问,所以我添加了
config.autoload_路径默认情况下,会话值使用json序列化-无法在json中表示的类型无法还原
Rails过去使用marshal,它允许序列化任何类型(取决于反序列化时类是否可用),但对外部提供的数据进行反序列化是不安全的。会话cookie是经过签名的,因此可以对此提供一些保护,但使用json完全可以避免这个问题。您可以通过更改
config.action_dispatch.cookies_serializer
不过,我会尽量避免这种情况。要么在会话中存储更简单的数据,要么从会话中的json数据显式构造类的新实例谢谢,我决定采用新实例路线,直到我找到一种更好的方法来处理应用程序为止。
<%= form_for [@child,@answer], as: :answer_of_child do |f| %>
<%= f.hidden_field :child_id, :value => @child.id %>
<%= f.hidden_field :question_id, :value => @question.id %>
<%= f.hidden_field :previous_action, :value => request.path %>
<%= @question.question %><br>
Response:<%= f.text_field :response %><br>
<%= @question.description %><br>
<%= f.submit "Next" %>
<% end %>
class AnswersController < ApplicationController
def create
Answer.create(answer_params)
redirect_to params[:answer_of_child][:previous_action]
end
private
def answer_params
params.require(:answer_of_child).permit(:response, :question_id,:child_id)
end
end
class AssessmentQueue
def initialize(domain_name)
@question_queue = []
@subdomains = ["Prone","Supine","Responses","Reflexes","Sitting","Standing","Mobility","Throwing and Catching"]
@yes_count = 0
@domain = domain_name
end
def enqueue(question_set)
if(question_set.empty?)
return false
end
@question_queue = question_set.to_a
return true
end
def dequeue
@question_queue.shift
end
def is_empty?
@question_queue == []
end
def current_subdomain
@subdomains[0]
end
def finished_domain?
@subdomains.empty?
end
def move_to_next_subdomain #make private?
@subdomains.shift
end
def set_subdomains(subdomains)
@subdomains = subdomains
end
def get_current_subdomain
@subdomains[0]
end
def get_domain
@domain
end
end
config.action_dispatch.cookies_serializer