OK、顧客が所有しているウィジェットの数を示すページがあります。ビュー(haml)は次のとおりです。
#available
= "Available widgets: #{@customer.widgets.unused.count()}"
(「未使用」は、使用可能なウィジェットを示すモデル内のスコープです)。
顧客が「:remote => true」を含むフォームでウィジェットを引き換えると、一部の JavaScript がアニメーション付きの適切な DIV をページに配置し、コントローラーによってモデルが更新されます。
コントローラーは次のとおりです。
def redeem
@customer = Customer.find(params[:customer_id])
number = params[:amount].to_i
unless @customer.widgets.unused.empty?
number.times do
@customer = Customer.find(params[:customer_id])
widget = @customer.widgets.unused.first # Grab first unused pass
widget.status = "Redeemed"
widget.save!
end
else
@pay = "true"
# customer.widgets.new
end
# redirect_to @customer
end
そして、ここにjavascript(js.erb)があります:
var number = <%= params[:amount] %>;
<% if @pay.eql? "true" %>
$("#widget-pay").modal('toggle');
<% else %>
while (number > 0) {
var item = $('<div class="widget-show">...</div>');
$('#allwidgets').isotope('insert', item);
number --;
}
<% end %>
私の問題は、「#available」DIV を新しいウィジェット数で更新したいということです。どうすればいいですか?
最悪の場合、ページをリロードしてモデルからデータを再度取得することもできますが、せいぜい DIV を更新するだけです。どちらもJavaScriptからできるようには見えません。