Цель: создать несколько заказов на основе количества определенных связанных записей.
Вот форма: (не важно, но получение ошибок
<%= form_for(@order) do |form| %>
<%= form.hidden_field :cart_id, value: @cart.id %>
<%= form.hidden_field :store_order_id, value: "1" %>
<%= form.text_field :shipping_name %>
<%= form.text_field :shipping_address1 %>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
Ошибка:
ActionView :: Template :: Error (Первый аргумент в форме не может содержать ноль
или быть пустым):
Модель:
ShopProduct
has_one :order
has_many :line_items
Заказать
belongs_to :product, optional: true
belongs_to :shop_product, optional: true
belongs_to :cart
LineItem
belongs_to :shop_product, optional: true
belongs_to :product, optional: true
belongs_to :cart
Корзина
has_many :line_items, dependent: :destroy
has_one :order
OrdersController:
def create
cart = Cart.find(params["order"]["cart_id"])
line_items = LineItem.where(cart_id: cart)
shop_product_line_items = line_items.where.not(shop_product: [nil, ""])
product_line_items = line_items.where.not(product: [nil, ""])
shop_products = ShopProduct.find(shop_product_line_items.each { |li| li.shop_product })
products = Product.find(product_line_items.each { |li| li.product })
if shop_products.present?
shop_products.each { |sp|
@order = Order.new
@order.shop_product_id = sp.id
@order.product_id = sp.product_id
@order.cart_id = cart
@order.save!
}
end
if products.present?
products.each { |p|
@order = Order.new
@order.product_id = p.id
@order.cart_id = cart
@order.save!
}
end
@orders = Order.where(cart_id: cart)
respond_to do |format|
if @orders.count == line_items.count
session[:cart_id] = nil
format.html { redirect_to @order, notice: 'Order was successfully created.' }
format.json { render :show, status: :created, location: @order }
else
format.html { render :new }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
Как это работает, есть тележка, которая затем прикрепляется ко многим line_items
, которые могут быть shop_product
или product
. Затем я хочу сохранить отдельный заказ на основе каждого @cart.line_items
.
Как я могу создать несколько ордеров на основе того, сколько line_items присутствует в корзине?