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