私の Rails (3.1) アプリにはショッピング カートがあり、その人が自分の州に入った後にページに売上税フィールドと合計を表示します。
エラーがあり、その人がすでに状態に入っている場合を除いて、正しく機能します。その場合、フィールド値は変更されないため (State フィールドは既に入力されているため)、jQuery (update_sales_tax) は再度トリガーされません。
(エラーが発生した場合) ビューを再度レンダリングする方法はありますか? または、ユーザーに消費税をページに動的に表示するためのより良いアプローチ (州に依存しているため) でしょうか?
format.html {render :action => 'new'}
つまり、 Orders#new にエラーがある場合、コントローラーはこれを行います。人がすでに入力したフォームのフィールドに値を入力しますが、jQuery を介して :state フィールドの onChange でトリガーされる売上税を再計算しません。ビューが再びレンダリングされ、:state が既に入力されている場合、これを再計算するにはどうすればよいですか?
Orders#new ビューには次のものがあります。
<%= form_for(@order, :method => :post) do |f| %>
<%= f.hidden_field :total_sales_tax, :value => @tax_amount %>
<%= f.fields_for :products_shipping do |shipping | %>
<%= shipping.select(:state , Order::STATES ,{:prompt => 'Select State'}, :id => "ship_state",:onchange => "update_sales_tax()") %>
<% end %>
<% end %>
<script>
function update_sales_tax(){
jQuery.ajax({
url: '/orders/order_update',
dataType: 'script',
type:'get',
data:'stateTo='+jQuery("#ship_state").val()
})
}
</script>
orders/order_update.js.erb で:
jQuery('#cart_details').html('<%= escape_javascript(render(:partial => @cart)) %>');
jQuery('#order_amount').val('<%= format("%.2f", @grand_total) %>');
jQuery('#order_total_shipping').val('<%= format("%.2f", @cart.total_shipping) %>');
jQuery('#order_total_sales_tax').val('<%= format("%.2f", @tax_amount) %>');