Проблема с передачей данных из контроллера в JavaScript
Пытаюсь использовать JavaScript для перехода на новую страницу при клике по элементу. Вот мой код:
$(document).ready(function() {
$('.item-block').click( function() {
window.location.href = '/orders/' + gon.order_item_id;
});
});
Но получаю такую ошибку:
Couldn't find Order with 'id'=undefined [WHERE "orders"."user_id" = $1]
Вот мой контроллер order_controller.rb:
def show
@order = current_user.orders.find(params[:id])
gon.order_item_id = @order.id
end
def index
@orders = current_user.orders.all
# как передать id конкретного объекта заказа в gon здесь?
end
Думаю проблема в том как я передаю аргумент URL в метод href. Можете помочь понять что я делаю не так? Сам gon работает нормально, проверял через alert.
Заранее спасибо за помощь!
У тебя смешались два разных метода контроллера. В index ты не устанавливаешь gon.order_item_id, поэтому он undefined. А если установишь - какой именно id из всех заказов? Я бы убрал gon из этой задачи. Просто в каждом блоке заказа добавь атрибут с id прямо в html, типа data-id=“#{order.id}”, а в джаваскрипте читай через .data(‘id’). Так намного проще и логичнее.
Проблема в том, что в методе index ты не задаешь gon.order_item_id для конкретного заказа. В show у тебя один заказ, в index - массив. Лучше передавай id через data-атрибут в HTML, а не через gon - так у каждого элемента будет свой id.
Да, проблема очевидная - у тебя на странице index несколько заказов, а gon.order_item_id хранит только одно значение. В JS ты обращаешься к одной переменной для всех элементов. Проще всего добавить data-order-id=“<%= order.id %>” для каждого .item-block в ERB шаблоне и брать через $(this).data(‘order-id’) в JS. Тогда каждый клик получит свой правильный id.