尽管方法作为帖子,在link_to中,params被添加到URL?

时间:2013-03-29 23:30:28

标签: ruby-on-rails ruby ruby-on-rails-3

通过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 !!!!

1 个答案:

答案 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 %>