Rails 4 ajax update div
Lubię aktualizować tabelę o nowe wartości za pomocą ajax. Jaki jest pomysł. Mam wózek, w którym użytkownik może zmienić ilość produktu. Nie lubię przeładowywać całej strony. Chcę ponownie załadować tabelę. W tej chwili działa z przeładowaniem całej strony.
Co zrobiłem
Mam formularz do wprowadzania wartości ilościowej. Aby połączyć produkt z koszykiem (ManyToMany), używam line_item. Tak więc każdy line_item reprezentuje produkt w koszyku.
Ten widok wózka
<div id="cart_table">
<%= render @cart %>
</div>
Render @cart
<table class="table table-hover table-condensed">
<tbody>
<%= render cart.line_items %>
</tbody>
</table>
Line_items z formularzem aktualizacji:
<%= 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 %>
Kontroler 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
Tutaj utknąłem. Co muszę umieścić w moim update.js.rjs? Teraz mam tę linię
$('#cart_table').replaceWith("<%= escape_javascript(render @cart) %>");
Ale nic się nie dzieje i pojawia się błąd w konsoli:
send
jQuery.extend.ajax
$.rails.rails.ajax
$.rails.rails.handleRemote
(anonymous function)
jQuery.event.dispatch
elemData.handle
Byłoby miło uzyskać kilka pomysłów na rozwiązanie tego małego problemu.
Dzięki
Edytuj: lepiej jest użyć
$('#cart_table').html("<%= escape_javascript(render @cart) %>");
w pliku js.