Создать заказ с разным количеством продуктов - PullRequest
0 голосов
/ 27 января 2020

У меня есть страница со списком доступных продуктов, и я хочу, чтобы пользователь мог указать, какое количество каждого продукта он хочет. Я не уверен, как правильно создать форму. Я сделал это, но я уверен, что это не лучший способ сделать это ...

<%= form_tag create_order_path, :method => :post do %>
  <% @products.each do |product| %>
      <input name="ads[<%= product.id %>][quantity]">
  <% end %>
  <input type="submit" name="commit" value="Pay"></input>
<% end %>

В моем контроллере у меня есть

@products = []
params[:ads].each do |ad|
   if product[1][:quantity].to_i > 0
     @products << [product[0], product[1][:quantity]]
   end
end

Моя цель - получить список идентификаторов продуктов и количества, необходимого для того, чтобы я мог создать заказ с ним. Каков будет правильный способ сделать это?

1 Ответ

0 голосов
/ 27 января 2020

Модель продукта

class Product < ApplicationRecord
  has_and_belongs_to_many :orders, join_table: PurchaseProduct.table_name

  has_many :purchase_products
end

Модель заказа

class Order < ApplicationRecord
  has_and_belongs_to_many :products, join_table: PurchaseProduct.table_name

  has_many :purchase_products

  accepts_nested_attributes_for :purchase_products
end

МодельПокупка товара

class PurchaseProduct < ApplicationRecord
  belongs_to :product
  belongs_to :order
  validates :quantity, length: { minimum: 1 }
end

Форма заказа

  ...
  <%= form.fields_for :purchase_products do |another_form| %>
    <div class="field">
      <table>
        <tr>
          <td>
            <%= another_form.label :product %>
            <%= another_form.select(:product_id, Product.all.collect {|p| [ p.name, p.id ] }, ) %>
          </td>
          <td>
            <%= another_form.label :quantity %>
            <%= another_form.number_field :quantity %>
          </td>
        </tr>
      </table>
    </div>
  <% end %>
  ...

Для рендеринга x раз продукт и количество x.times { @order.purchase_products.build }

См. Полные шаги, чтобы построить это здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...