выберите вложенные атрибуты в форме - PullRequest
0 голосов
/ 29 декабря 2018

Это интернет-магазин

Я создаю продукт с вложенными размерами_атрибутов

Клиент может купить товар, и он должен выбрать свой размер

products_controller.rb

  def params_product
    params.require(:product).permit(:title, :description, :price, 
:category_id, :color, sizes_attributes: [:id, :size_name, :quantity, :_destroy])
   end

products / show.html.erb

Таким образом, клиент может выбрать требуемое количество и его размер

   <%= form_tag order_items_path do %>
    <%= hidden_field_tag :product_id, @product.id %>
    <%= hidden_field_tag :user_id, current_user.id %>
    <%= number_field_tag :quantity, 1 %> 
    <%= collection_select :size, :id, @product.sizes, :id, :size_name, prompt: "Votre taille" %>
    <%= submit_tag "Add to Cart" %>
   <% end %>

shopping_cart.rb

  def initialize(token:)
    @token = token
  end

  def order
   @order ||= Order.find_or_create_by(token: @token, status: 0) do |order|
    order.sub_total = 0
   end
 end

 def add_item(product_id:, quantity: 1, user_id:, size_id:)
   @product = Product.find(product_id)
   @size = Size.find_by(id: size_id)
   #binding.pry

   user = User.find(user_id)
   order.user_id = user.id

   order_item = order.items.find_or_initialize_by(product_id: product_id)
   order_item.price = @product.price
   order_item.quantity = quantity
   order_item.size_id = @size.id


   ActiveRecord::Base.transaction do
     order_item.save
   end
 end

order_items_controller.rb

  def create
    current_cart.add_item(
     product_id: params[:product_id],
     quantity: params[:quantity],
     user_id: params[:user_id],
     size_id: params[:size_id]
   )
  end 

Итак, проблема в следующем:

  • Доступные размеры на товаре могут быть ["S", "M", "L", "XL"]
  • Мой пользователь выбрал "L"
  • Выбранный размер:не сохранен

Он записывает "S" ...

1 Ответ

0 голосов
/ 29 декабря 2018

collection_select создает поле выбора с именем = "size [id]", и вы получаете {size: {id 1}} вместо {size_id: 1} в параметрах контроллера.Вам нужен помощник select_tag здесь:

<%= select_tag :size_id, options_from_collection_for_select(@product.sizes, :id, :size_name), prompt: "Votre taille" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...