2016-09-23 5 views
0

私はRails(4.2.6)アプリケーションで作業しており、自分のページの1つに問題が発生しました。Rails 4フォームがajaxの部分レンダリング後にPost(パッチではなく)に戻ります

このページには、製品見積の生成を支援するさまざまなモデル属性用の複数のフォームが含まれています。たとえば、販売数量、利益率などの注文固有の詳細を設定することができます。各フィールドは個々のフォームであり、ajaxを介して送信され、結果としてページ上のいくつかの部分的な部分を再描画します。 (_costings.html.erb

また、見積もり、ネストされたフォームのテーブル(各フォームは1つのテーブル行にあり、それぞれにチェックボックスがあります)から製品見積もり数量(したがって単価)を選択することもできます。 。いずれかのチェックボックスをオンまたはオフにすると、関連フォームがjQuery(remote:false)を介して送信されます。 (_factory_quotes.html.erb

ページの最初の読み込み時に、製品フォームの提出は完全に機能します。私が望むだけ多くのボックスをチェック/チェック解除することができ、データが正しく送信され、ページがリフレッシュされます。

問題は、ajaxを介してサブミットされた順序値を更新し、パーシャルが再レンダリングされますが、ページは完全にリフレッシュされません。その後、工場見積もりフォームは[No route matches [POST] "/quotation_quantities/83"]のようなエラーを表示するパッチではなくポストとして送信されます。

これは、Ajaxコールの後にリフレッシュ/バインドされていないものと関連しているが、解決策を見つけられないという前提があります。

製品見積量テーブル本体(_factory_quotes.html.erb):

<tbody> 
    <% @related_quotes.each do |e| %> 
     <tr id="<%= e.id %>" class="<%= if e.quantity == @order_costing.order_quantity then 
                  'success' 
                 elsif e.quantity > @order_costing.order_quantity then 
                  'warning ' 
                 end %>"> 
      <%= form_for e, method: :put, html: {:id=> "form-#{e.id}"}, remote: false do |quote| %>      
       <td> 
        <%= quote.object.quantity %> 
       </td> 
       <td> 
        <%= quote.object.production_lead_time %> 
       </td> 
       <td> 
        <%= Money.new(quote.object.unit_price*100, quote.object.ordercurrency.name).format unless quote.object.unit_price.nil? %> 
       </td> 
       <td> 
        <%= quote.check_box :use_in_costing %> 
       </td> 
       <% end %> 
     </tr> 
     <script> 
      $(document).ready(function() { 
       $('#<%= e.id %>').on('change', function() { 
        $("#form-<%= e.id %>").submit(); 
       }); 
      }); 
     </script> 
     <% end %> 
</tbody> 

例順序特定の詳細フォーム(_costings.html.erb):

<div class="row" id="text3"> 
    <div id="text"> 
    <%= form_for @order_costing, remote: true do |f| %> 
     <div class="col-xs-8"> 
      <%= f.label :gross_margin, 'Margin(%)' %> 
     </div> 
     <div class="col-xs-8" %> 
      <div class=<%= @order_costing.gross_margin <= 20 ? "has-error" : "" %>> 
      <%= f.number_field :gross_margin, class: 'form-control', :step => 'any' %> 
      </div> 
     </div> 
     <div class="col-xs-4"> 
      <%= f.submit 'Apply', id: "box3", class: 'btn btn-sm btn-default', style: 'float:right' %> 
     </div> 
    <% end %> 
    </div> 
</div> 

Update.js.erb:

$("#order_costings").html("<%= j render(partial: 'costings') %>"); 
$("#order_extras").html("<%= j render(partial: 'extras') %>"); 
$("#order_factory_quotes").html("<%= j render(partial: 'factory_quotes') %>"); 
$("#order_summary").html("<%= j render(partial: 'summary') %>"); 
$("#order_quote_quantities").html("<%= j render(partial: 'quote_quantities') %>"); 

order_costings_controller.html.erb

def update 
    respond_to do |format| 
     if @order_costing.update(order_costing_params) 
     #call a couple of helpers 
     order_costing_calculations 
     gather_selected_quote_data 

     format.html 
     format.js { render layout: false } 
     end 
    end 
    end 
+0

Railsは、実際にPOSTリクエストで、フォームでHTTPのPATCHリクエストを使用しますが、 '_method'-PARAMしません。 –

+0

OK、それは(部分的レンダリングアヤックスの前に)最初にパッチとして記録されます:2016年9月23日11時03分08秒+ 0100' で '開始PATCH "/ quotation_quantities/82" 127.0.0.1のためではなく、 ajaxによってレンダリングされた後の投稿: 2016-09-23で127.0.0.1の 'Started POST"/quotation_quantities/83 "11:04:10 + 0100' ' の両方のシナリオに存在します。 – AlainR

答えて

0

これは、テーブルの子要素であるフォームの結果である判明。フォームセルをテーブルセル<td>内に移動すると簡単に解決できます。 ため息

は、私は次のスレッドからこれを見つけた:Form inside a table

関連する問題