在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
。
为什么会这样?我该如何解决这个问题?
答案 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 %>