Я создаю веб-приложение, которое позволяет людям добавлять курсы в корзину. У меня есть модель корзины, у которой есть LineItems.
В корзине у меня есть измененная кнопка, которая позволяет людям удалять отдельные позиции. Это отлично работает. Вот код для этого:
_line_item.html.erb:
<div class="delete_line_item"><%= button_to 'Delete', line_item,
{:method => :delete, :remote => true} %></div>
Контроллер line_items:
def destroy
@user = current_user
@line_item.destroy
@cart = @user.cart
respond_to do |format|
format.html { redirect_to(root_path) }
format.js
format.xml { head :ok }
end
end
Затем файл destroy.js.erb, расположенный в папке my views / line_items:
$("#cart").html("<%= escape_javascript(render(@cart)) %>");
Я хочу сделать что-то подобное для опустошения корзины. Для этого я использую действие обновления в контроллере тележек. Вот соответствующие куски кода для этого:
<div class="empty_cart"><%= button_to 'Empty cart', cart, {:method => :put, :remote => true,
:confirm => 'Are you sure?'} %></div>
#carts controller
def update
if @cart.line_items
@cart.line_items.each do |item|
item.destroy
end
end
respond_to do |format|
if @cart.update_attributes(params[:cart])
format.html { redirect_to(root_path, :notice => 'Cart emptied.') }
debugger
format.js
format.xml { head :ok }
Наконец, вот файл update.js.erb Я поместил в свою папку views / carts :
$("#cart").html("<%= escape_javascript(render(@cart)) %>");
Проблема в том, что когда я пытаюсь очистить корзину, запрос проходит (в том случае, когда я обновляю страницу, корзина пуста), но изменение не появляется сразу после нажатия. Это заставляет меня думать, что мой браузер просто не рендерит файл .js.erb. Нужно ли помещать файл update.js.erb в другую папку или переименовывать его? Или что-то еще происходит?