Как мне создать новый экземпляр моего cart_item в контроллере продуктов - PullRequest
0 голосов
/ 04 февраля 2019

Я создаю простой магазин.

Моя схема:

cart_items(product_id, cart_id, quantity)

carts()

products(title, price, inventory)

Теперь я пытаюсь создать на странице товаров кнопку для создания корзины.Затем на странице показа для каждого продукта есть кнопка add_to_cart, которая создает cart_item с product_id и cart_id из самой последней корзины.

Я знаю, как это сделать наconsole.

CartItem.create(cart: Cart.last product: 'some product', quantity: 1)

Поскольку единственный параметр, который изменится, это product_id.Я полагаю, мне нужно создать метод в ProductsController с именем add_to_cart, который принимает текущий product_id и создает позицию.

Я новичок в ruby ​​на рельсах, и я не знаю, как это сделать правильно, и если то, что я пытаюсь, - правильный путь.

Как мне показать кнопку на моих продуктах?страница, которая говорит add_to_cart и создает cart_item с этим product_id и последней корзиной?

Обновление:

путь для add_to_cart равен add_to_cart.Когда я делаю это Add_to_cart_path, возникает ошибка, запрашивающая did you mean 'Add_to_cart_path_url', которая приводит к другой ошибке, если я ее изменяю.

В настоящее время я получаю ошибку wrong number of arguments (given 1, expected 0)

Мой метод

def add_to_cart
  product_id = params[:product_id]
  CartItem.create(product: Product.find(product_id), cart: Cart.last, quantity: 1)
end

1 Ответ

0 голосов
/ 04 февраля 2019

Для получения продукта со страницы продукта просто добавьте product_id с link_to

link_to 'Add to cart', your_add_to_cart_controller_path(product_id: @product.id)

и получите это product_id в вашем add_to_cart методе.

Обновление

def add_to_cart
  product = Product.find_by(id: params[:product_id]) if params[:product_id].present?
  CartItem.create(product: product, cart: Cart.last, quantity: 1) if product.present?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...