У меня есть ассоциация полиморфизма c, и я пытаюсь создать форму, которая связывает Product
с FoodOrder
:
class FoodOrder < ActiveRecord::Base
belongs_to :client
belongs_to :order_status
has_many :order_items, dependent: :destroy, as: :order
has_many :orderables, through: :order_items, source: :orderable, source_type: "Product"
end
class OrderItem < ApplicationRecord
belongs_to :order, polymorphic: true
belongs_to :orderable, polymorphic: true
belongs_to :product, -> { where( order_items: { orderable_type: 'Product' } ).includes(:order_items) }, foreign_key: 'orderable_id', optional: true
end
class Product < ApplicationRecord
end
Вот схема для OrderItem
:
class OrderItem < ApplicationRecord {
:id => :integer,
:quantity => :integer,
:created_at => :datetime,
:updated_at => :datetime,
:orderable_id => :integer,
:orderable_type => :string,
:order_id => :integer,
:order_type => :string
}
Моя форма по сути является меню, и я хотел бы передать все orderables
и создать их связь с food_order
за один вызов.
<%= simple_form_for [@client, @food_order], defaults: { input_html: { class: "form-input-order" }} do |f| %>
<%= f.error_notification %>
<%= f.fields_for :orderables do |order_items_form| %>
<% Product.all.each do |prod| %>
<li>
<%= prod.name %>
<%= prod.id %>
<%= order_items_form.input :orderable_id, as: :hidden, input_html: { value: prod.id } %>
<%= order_items_form.input :orderable_type, as: :hidden, input_html: { value: 'Product' } %>
quantity: <%= order_items_form.number_field :quantity %>
</li>
<% end -%>
<% end -%>
<div class="form-actions text-center col-xs-12">
<%= f.button :submit, "Submit Order !", class: "btn-success" %>
</div>
<% end %>
Это не работает и в своих параметрах я вижу следующее: (стоит отметить, что последний продукт в форме имеет идентификатор: 48)
Parameters: {"utf8"=>"✓",
"food_order"=>{
"orderables"=>{"orderable_id"=>"48", "orderable_type"=>"Product", "quantity"=>""}
},
"commit"=>"Submit Order !",
"client_id"=>"24324233",
"id"=>"2583447"
}
Кажется, что каждый orderable
перезаписывает предыдущий orderable
, а не передает все упорядоченные параметры как массив.
Как я могу связать много продуктов с этим заказом еды за 1 проход?