【问题标题】:Keep Form Value After submitting another form | Ruby on Rails | GET保留表单值 提交另一个表单后 | Ruby on Rails |得到
【发布时间】:2016-06-22 19:13:13
【问题描述】:

在我的 Rails 网站上,我有一个包含许多表单(用于搜索)的网页,GETGETPOST相比的好处是参数存储在URL中,用户可以将URL与他们在搜索中所做的所有设置共享。

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

所以在keep form value after submit it 中,有一个建议是使用POST 而不是GET.. 但它会使URL 不显示任何内容,这对我的用例不利。

知道如何解决它吗?目标是保留以前的表单结果(如果未更改)并让表单显示在 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 中提交表单时,我可以在URL 中看到/foo/search?search=someThing;但是在我在页面中提交myForm 之后,search=someThing 就消失了,但/foo/search?query[name]=someOtherThing 正在显示。我怎样才能让它显示/foo/search?search=someThing&amp;query[name]=someOtherThing

【问题讨论】:

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


    【解决方案1】:

    这里有两个选项:

    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";
      

    【讨论】:

    • 已解决 - 扩大过滤区域使其成为单一形式。
    • 又遇到了麻烦...我可能想使用`window.location.href = "stackoverflow.com?search=someThing&query[name]=someOtherThi…";` 东西,但我发现很难在@987654330 之间插入RESTful 标签@ 和其他查询稍后出现。
    • @SeanLao 应该像遍历包含所有表单字段值的数组(或哈希?)并将这些键值对附加到您的域名一样简单(在这种情况下为stackoverflow.com? ),在它们之间放置&amp; 符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多