2

ajax を使用して新しい値でテーブルを更新するのが好きです。アイデアは何ですか。ユーザーが製品の数量を変更できるカートがあります。ページ全体をリロードするのは好きではありません。テーブルをリロードしたい。現時点では、ページ全体のリロードで動作します。

私がやった事。

数量値を入力するためのフォームがあります。製品をカート (ManyToMany) に接続するには、line_item を使用します。したがって、すべての line_item はカート内の製品を表します。

カートのこのビュー

<div id="cart_table">
  <%= render @cart %>
</div>

@cart のレンダリング

<table class="table  table-hover table-condensed">
  <tbody>
    <%= render cart.line_items %>
  </tbody>
</table>

更新フォームの Line_items:

<%= form_tag(line_item_path, method: "put", remote: true, class: "table_form") do %>
  <%= hidden_field_tag("product_id", value = line_item.product.id) %>
  <label>
    <%= number_field_tag "quantity", value = line_item.quantity, in: 1...11 %>
    <%= submit_tag "update", class: "btn btn-mini" %>
  </label>
<% end %>

line_items のコントローラー:

def update
    @cart = current_cart
    @line_item = @cart.update_product(params[:product_id], params[:quantity])
    respond_to do |format|
        if @line_item.save
            format.html { redirect_to current_cart, notice: 'Changed' }
            format.js
        else
            format.html { render action: "new" }
        end
    end
end

ここで行き詰まります。update.js.rjs に何を入れなければなりませんか? 今、私はこの行を持っています

$('#cart_table').replaceWith("<%= escape_javascript(render @cart) %>");

しかし、何も起こらず、コンソールにエラーが表示されます:

send 
jQuery.extend.ajax 
$.rails.rails.ajax 
$.rails.rails.handleRemote 
(anonymous function) 
jQuery.event.dispatch 
elemData.handle

この小さな問題を解決するためのアイデアを得ることができれば幸いです。

ありがとう

編集:使用する方が良い

$('#cart_table').html("<%= escape_javascript(render @cart) %>");

jsファイルで。

4

1 に答える 1

5

update.js.erb代わりに使用してみてくださいupdate.js.rjs

于 2013-09-17T07:06:13.833 に答える