Ваша updateQuantity()
функция должна выполнить ajax-вызов метода в вашем контроллере, который обрабатывает изменения в базе данных и отвечает либо на json, либо на js, чтобы манипулировать dom.
function updateCart(e){
$.ajax({
type: "patch",
url: 'your_route_to_method', //point to the route that updates the item
data: {
your_resource_scope: { quantity: e.value } //sanitize input in strong params
},
success: function (response) {
//response is the json you get back from your controller
//handle the logic of whatever happens in the dom after you update the quantity
}
});
}
Я бы предложил прикрепить идентификатор продукта, который вы хотите обновить, к родительскому элементу ввода, чтобы вы могли передать его на свой маршрут и не забудьте передать значение в требуемой области, чтобы вы могли санироватьвведите в ваш контроллер через strong_params.
В вашем контроллере:
def update
respond_to do |format|
if @your_resource.update(your_resource_params)
format.json { render json: { key: value } } #build the json you want to return
else
#handle failiure
end
end
Если вы решите отвечать в js вместо json, вам нужно создать представление с тем же именем, что и ваш методс расширением .js или .js.erb (вместо .html / .html.erb) и обработайте успешный ответ в js.В этом представлении у вас есть доступ ко всем переменным экземпляра, объявленным в вашем методе.Например:
# => update.js.erb or your_custom_method_name.js.erb
$('#resource_#{ @your_resource.id }_price').replaceWith('<p>#{ @your_resource.quantity * @your_resource.price }</p>');
Если вы идете по этому маршруту, не забудьте удалить часть success
вашего вызова ajax.