点击链接后丢失会话和cookie

时间:2014-04-25 23:35:55

标签: http model-view-controller ruby-on-rails-4 get web-deployment

在Rails 4多表单应用程序中,我试图在表单中保留表单数据,以防用户在提交表单之前需要返回并编辑表单。

第1页包含表格。第2页向用户显示了数据,其中包含" Go Back"或"提交"表格。以下是" Go Back"的代码。元素:

<%= link_to 'Go Back', {controller: :partials, action: :index}, id: 'go_back_btn' %>

我还会在每个页面中显示会话和Cookie以进行故障排除:

<%= session[:formData].inspect %>

问题

当我点击上述按钮(实际为<a>标签)时,我会返回第1页,但我的会话为nil。我也在cookie中设置了值,但它们也设置为nil

为什么会这样?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

事实证明,会话正在控制器的动作中明确重置(摆脱它),并且不能从哈希或会话中设置cookie(无法确认)那种行为)。所以解决方案是将会话中的所需数据解析为JSON对象并将它们发送到视图,在那里我使用JavaScript使用它收到的JSON重新填充表单。

在控制器中:

def index
    # Conditionally store prepopulated form data from the session in some cookies
    if session[:myData]
        # Store the session data into instance variable and convert it to JSON
        @myData = session[:myData].to_json

        # Resetting session is optional
        reset_session
    end
end

在视图中:

<% if @myData %>

    <script type="text/javascript">
        // Store values from the controller instance variables
        //   Need to call raw method so browser doesn't escape the quotation marks that exist in @myData (JSON object)
        var myData = <%= raw @myData %>;

        // Do something with you myData

    </script>

<% end %>