У меня есть три модели Item, ItemVariations и ItemStocks.
Модель товара имеет много items_variations.
Аналогично, item_stocks содержит несколько item_variation_ids со значениями, разделенными запятыми, например 1,2,3. Модель товара также имеет много item_stocks.
Модель Item_variation имеет поля Variation_Name и Variation_value, которые я могу добавить из модели элемента в форме активного администратора.
Теперь то, что мне сейчас нужно, это для множественных вариантов_имя и варианта_значения, я должен иметь возможность вставить одно значение stock_qty, являющееся одним из полей в модели item_stock, из одной формы.
смотреть скриншот
#app/models/item.rb
class Item < ApplicationRecord
has_many :item_variations, foreign_key: :items_id
has_many :item_stocks, foreign_key: :items_id
accepts_nested_attributes_for :item_images, :item_variations, :item_stocks, allow_destroy: true
end
item_variation модель
#app/models/item_variation.rb
class ItemVariation < ApplicationRecord
belongs_to :item
validates_associated :item
has_attached_file :image, :path => ':rails_root/public/system/:class/:id/:style/:filename',
:url => '/system/:class/:id/:style/:filename'
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
конец
Модель товара_стока
#app/models/item_stock.rb
class ItemStock < ApplicationRecord
belongs_to :item
end
И, наконец, моя активная административная форма
#app/admin/items.rb
ActiveAdmin.register Item do
permit_params :item_id,
:item_name,
:item_code,
:products_id,
:display_tag,
:summary,
:description,
:additional_attribute_name,
:additional_attribute_text,
:on_sale,
:price,
item_images_attributes: [:image, :id, :_destroy],
item_variations_attributes: [:id, :variation_name, :value, :image, :_destroy]
action_item :create, only: :show do
link_to("New Item", new_admin_item_path(@items),
class: :button)
end
index do
actions
end
form :html => { :enctype => "multipart/form-data" } do |f|
f.semantic_errors *f.object.errors.keys
f.inputs "Item Details" do
f.input :item_name
f.input :item_code
f.inputs "Item Photos" do
f.has_many :item_images, allow_destroy: true do |p|
p.input :image, :required => true, :label=>'Photo', hint: p.object.image? ? image_tag(p.object.image.url, height: '100') : content_tag(:span, "Upload JPG/PNG/GIF image")
end
end
f.input :products_id, :as => :radio, :label=>"Product", :collection => Product.all.collect {|product| [product.product_name, product.id]}
f.input :display_tag
f.input :summary
f.input :description
f.input :additional_attribute_name
f.input :additional_attribute_text
f.input :on_sale
f.input :stock_qty
f.input :price
f.inputs "Item Variations" do
f.has_many :item_variations, allow_destroy: true do |p|
p.input :variation_name, :as => :select, :collection => VariationAttribute.all.collect {|variation_attribute| [variation_attribute.variation_name]}
p.input :value
p.input :image, :label=>'Photo', hint: p.object.image? ? image_tag(p.object.image.url, height: '100') : content_tag(:span, "Upload JPG/PNG/GIF image")
end
end
end
f.actions do
f.action :submit,
button_html: {
class: "btn primary",
data: {disable_with: 'Please Wait...'}
}
f.action :cancel, :wrapper_html => { :class => 'cancel'}, label: "Cancel"
end
end
end
Для этого лучше всего вставить item_variation_ids как значения, разделенные запятыми, в модели item_stocks. Как это сделать? Любая идея?