通过GET在我的表单中提交数据的问题是超出了网址长度。所以我转到了帖子。
我没有使用像will_paginate这样的gems,而是试图通过POST调用而无法使用,我正在做这样的事情。
<%= link_to "Next", {:controller => "orders", :action => "advanced_search", :method => :post, :page => params[:page].to_i+1, :filters => params[:filters], :limit => params[:limit]}%>
问题在于,尽管该方法是post,但它仍然将params合并到url本身。我基本上希望它再次使用新页面参数提交表单。但没有params填充网址。
如果有人能帮我解决这个问题,我真的很高兴。
更新:网址看起来像
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 !!!!
答案 0 :(得分:2)
将:method => :post
添加到链接不会使其成为发布请求。它只是添加一个名为method
的GET变量。
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 %>