Ruby 如何获取用户定义类型的Rails会话哈希变量来维护它';跨请求输入什么?

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完全可以避免

Rails V4.2.4。我在
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