保留表单值提交另一个表单后| Ruby on Rails |得到

时间:2016-06-22 19:13:14

标签: ruby-on-rails forms rest http post

在我的Rails网站上,我有一个包含GET多种表单(用于搜索)的网页。与GET相比,POST的商品是参数存储在网址中,以便用户可以与他们在搜索中设置的所有设置共享网址。

但是,当网页变得复杂并且有多种形式时,比如表单A和表单B.在我提交表单A之后,表单B中的内容将会消失,并且URL不再显示有关内容的任何内容表格B(如果我提交表格A,它只显示表格A中的内容,反之亦然)。

所以在keep form value after submit it中,有人建议使用POST代替GET ..但它会使网址没有显示任何内容,这对我的用例不利。

有关我如何解决它的任何想法?目标是保留以前的表单结果(如果没有更改),并使表单显示在URL中(更改时更新)

代码:

result.html.erb

<%= form_tag ('/foo/search'), :method => :get, :class => "form-inline" do %>
    <input name="search" type="text" class="form-control " placeholder="search name"/>
    <button type="submit"> search But</button>
<% end %>

....

<%= render :partial => 'page1' , ... %>

_page1.html.erb

....
<%= form_tag('/foo/search', method: "get", id: "myForm") do %>
    <%= text_field_tag "query[name]", params["query"].nil? ? nil : params["query"]["name"], placeholder: "name"%> 
<% end %>
....

当我在result中提交表单时,我可以在网址中看到/foo/search?search=someThing;但是,当我在页面中提交myForm后,search=someThing刚刚消失,但/foo/search?query[name]=someOtherThing正在显示。如何让它显示/foo/search?search=someThing&query[name]=someOtherThing

1 个答案:

答案 0 :(得分:0)

这里有两个选项:

  1. 制作单一表单。只要您的请求遇到相同的/foo/search路径,这似乎是一个天真的通用解决方案。我不确定您的表单的idclass属性的目的是什么,但您可能会重构您的样式和js代码以使用单个表单以及

  2. 请勿直接在submit活动中发送您的表单。相反,使用js捕获它,生成包含两个表单中所有数据的URL,然后手动点击它。

    # coffee script & jquery example
    $('body').on 'submit', 'form', (event) =>
      # some logics to collect all the form data...
      value1 = $('body form input_field').val()
      # head to path with all that parameters injected
      window.location.href = "http://stackoverflow.com?search=someThing&query[name]=someOtherThing";