0

通过 GET 在我的表单中提交数据的问题是超出了 url 长度。所以我转投post。

我没有使用像 will_paginate 这样的宝石,我会尝试通过 POST 调用但未能使用,我正在做这样的事情。

<%= link_to "Next", {:controller => "orders", :action => "advanced_search", :method => :post, :page => params[:page].to_i+1, :filters => params[:filters], :limit => params[:limit]}%>

问题是,尽管该方法已发布,但它仍会将参数合并到 url 本身。我基本上希望它使用新的页面参数再次提交表单。但是没有填充网址的参数。

如果有人能帮我解决这个问题,我真的很高兴。

更新:网址看起来像

http://localhost:3000/orders/advanced_search?filters%5Bapproved_between%5D=&filters%5Bcreated_between%5D=&filters%5Border_id%5D=0111T20822130100%0D%0AO11221D208211501118%0D%0AO11D208211501118%0D%0AO11T20822130100%0D%0AO121D208211501118%0D%0AO1221D208211501118%0D%0AO1D208211501118%0D%0AO1T20822140003&filters%5Bproduct_id%5D=&filters%5Bshipped_between%5D=&filters%5Bsku%5D=&method=post&limit=50&page=2

我从中心修剪了网址。浏览器抛出错误 - Request-URI Too Large

更新2:我现在正在使用这个不起作用。(我很冒昧地认为它会在正确测试之前起作用)。

<%= form_tag :controller=> "orders", :action => "advanced_search", :new_params => params.merge(:page => params[:page].to_i+1) do %>
          <%= submit_tag 'Next' %>
   <% end %>

虽然这会发送 new_params,但它仍然会更改 URL,尽管表单方法是 POST。它将表单操作链接中的数据包装为 orders/advanced_search?new_params....... URGH!!!!

4

1 回答 1

3

添加:method => :post到链接不会使其成为发布请求。它只是添加了一个名为method.

link_to不会创建 POST 链接。link_to创建<a>元素,除非您在其中使用 JavaScript,否则浏览器将执行GET请求。

为了使用POST请求,您必须使用表单。

我会尝试看看是否有其他方法可以传递所有这些变量。能够将链接粘贴/书签到页面总是很高兴。

编辑:

尝试这样的事情

<%= form_for :orders, :url => order_advanced_search_path do |form| %>
  <%= form.hidden :filters, params[:filters] %>
  <%= form.hidden :page, params[:page].to_i + 1 %>
  <%= form.hidden :limit, params[:limit] %>
  <%= form.submit "Next" %>
<% end %>
于 2013-03-30T00:40:20.453 回答