0

GET を使用してフォームにデータを送信する際の問題は、URL の長さが超過することです。なので投稿に切り替えました。

POST 呼び出しで使用しようとして失敗した will_paginate のような宝石を使用する代わりに、私はこのようなことをしています。

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

問題は、メソッドが投稿されているにもかかわらず、パラメーターを URL 自体にマージすることです。私は基本的に、新しいページパラメーターを使用して、フォームを再度送信したいと考えています。しかし、パラメータがURLに入力されていません。

誰かが私を助けてくれたら、本当にうれしいです。

更新: 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

URLを中央からトリミングしました。ブラウザーがエラーをスローします - 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 を送信しますが、フォーム メソッドが POST であるにもかかわらず URL を変更します。フォーム アクション リンクのデータを orders/advanced_search?new_params........ URGH!!!! としてラップします。

4

1 に答える 1

3

リンクに追加:method => :postしても投稿リクエストにはなりません。という名前の GET 変数を追加するだけですmethod

link_toPOST リンクを作成しません。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 に答える