Задать вопрос
@ArtemBlueberry

Как передать выбранное значение из collection select?

Доброго времени суток.
При разработке интернет- магазина возникла проблема: я добавил к модели product поле size, но я никак не могу сделать так, чтобы выбранный покупателем размер добавлялся к line items.
Подскажите как можно сделать так, чтобы выбранное значение из collection select можно было передать в качестве аргумента в функцию add to cart?

Show_product_to_customer view
= @product.title
= collection_select(:product,:size, @product.sizes, :id,:name)
= button_to 'В корзину', line_items_path(product_id: @product,size_id:  ??? ),
                    remote: true, form_class: 'button-cart'

Show_product_to_customer conrtoller
def show_product_to_customer 
    @product = Product.find(params[:id])
  end

Line item controller
def create
    @cart = current_cart
    product = Product.find(params[:product_id])
    size = Size.find(params[:size_id])
    @line_item = @cart.add_product(product.id,size.id)

def add_product(product_id,size_id)
    current_item = line_items.find_by(product_id: product_id, size_id: size_id)
    if current_item
      current_item.quantity += 1
    else
      current_item = line_items.build(product_id: product_id, size_id: size_id)
    end
    current_item
  end
  • Вопрос задан
  • 365 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@ArtemBlueberry Автор вопроса
Решил проблему следующим образом :
Show_product_to_customer view:
=form_for @line_item, url: create_line_item_path, html: {method: 'post'} do |f|
      =f.hidden_field :product_id, value: @product.id
      =@product.title
      br
      =f.collection_select(:size_id, @product.sizes.all, :id, :name)
      =f.submit 'В корзину'


routes.rb
get 'line_items', to: 'line_items#create', via: 'post' , as: 'create_line_item'


show_product_to_customer controller:
def show_product_to_customer #товар, показываемый пользователю
    @product = Product.find(params[:id])
    @line_item =LineItem.new
  end


Line_items controller:
def create
    @cart = current_cart
    size = Size.find(params[:line_item][:size_id])
    product = Product.find(params[:line_item][:product_id])
    @line_item = @cart.add_product(product.id, size.id)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы