ActiveAdmin Nested Multiple Selection Form

I am trying to update product_suppliers through a product form. The form displays all suppliers in the supplier table, but does not update the connection table. I don’t know where the error is. Index and display show the correct data, but editing does not update the connection table. Start walking around and around circles on it.

Update: Changing the form to below closed me. But do not update the connection table. However, the removal works as expected if I manually add rows to the connection table. They are displayed and can be deleted. Saving adds the new product_id to the string, not the supply_company_id value associated with it. I consider its problem with the attribute, but I do not see it.

application / models / product.rb

class Product < ActiveRecord::Base ### shortned for clarity has_many :product_suppliers, :foreign_key => 'product_id' has_many :supply_companies, :through => :product_suppliers accepts_nested_attributes_for :product_suppliers, :allow_destroy => true end 

app / models / supply_company.rb

  class SupplyCompany < ActiveRecord::Base has_many :products, :through => :product_suppliers has_many :product_suppliers, :foreign_key => 'supply_company_id' end 

app / models / product_supplier.rb

 class ProductSupplier < ActiveRecord::Base belongs_to :product belongs_to :supply_company accepts_nested_attributes_for :product accepts_nested_attributes_for :supply_company end 

/app/admin/product.rb

 ActiveAdmin.register Product do # See permitted parameters documentation: # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters # permit_params :id, :product_name, :product_description, :product_type_id, :product_category_id, :product_colour_id, :product_size_id, product_images_attributes: [:id, :product_id, :product_image, :_destroy], product_types_attributes: [:id, :product_type], product_catergories_attributes: [:id, :product_category], product_colour_attributes: [:id, :product_colour], product_size_attributes: [:id, :product_size], product_suppliers_attributes: [:id, :product_id, :supply_company_id, :_destroy], supply_companies_attributes: [:id, :company_name] form(:html => {:multipart => true}) do |f| f.inputs "Product Details" do f.input :id f.input :product_name f.input :product_description ####################################################################### # Problem Lies with this piece of code Not saving the supply_company_id # when adding a new row or updating the old rows. Delete works fine. # cant see the error in models or permited_params....... ####################################################################### f.inputs "Suppliers" do f.has_many :product_suppliers do |ff| ff.input :supply_company_id, as: :select, multiple: true, collection: SupplyCompany.all.map {|u| [u.company_name.to_s, u.id]} ff.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove supplier' end end ######################################################## f.input :product_type_id, :as => :select, :collection => ProductType.all.map {|u| [u.product_type.to_s, u.id]} f.input :product_category_id, :as => :select, :collection => ProductCategory.all.map {|u| [u.product_category.to_s, u.id]} f.input :product_colour_id, :as => :select, :collection => ProductColour.all.map {|u| [u.product_colour.to_s, u.id]} f.input :product_size_id, :as => :select, :collection => ProductSize.all.map {|u| [u.product_size.to_s, u.id]} end f.inputs "Product images" do f.has_many :product_images do |p| p.input :product_image, :as => :file, :label => "Image",:hint => image_tag(p.object.product_image.url(:thumb)) p.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove image' end end f.actions end 

product_suppliers_schema

  create_table "product_suppliers", force: true do |t| t.integer "product_id" t.integer "supply_company_id" t.datetime "created_at" t.datetime "updated_at" end 

Update: Changing the form to a lower level brought me closer. But do not update the connection table. However, the removal works as expected if I manually add rows to the connection table. They are displayed and can be deleted. Saving adds the new product_id to the string, not the supply_company_id value associated with it . I consider its problem with the attribute, but I do not see it.

  f.inputs "Suppliers" do f.has_many :product_suppliers do |ff| ff.input :supply_company_id, as: :select, multiple: true, collection: SupplyCompany.all.map {|u| [u.company_name.to_s, u.id]} ff.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove supplier' end end 
+6
source share
1 answer

Turns out it was the multipart :: true code in the code. As soon as I removed it from the code below, everything worked as expected.

  form(:html => {:multipart => true}) do |f| f.inputs "Product Details" do f.input :id f.input :product_name f.input :product_description f.has_many :product_supply_companies do |ff| ############################################### #REMOVED multipart: :true from the line below ############################################### ff.input :supply_company_id, as: :select, collection: SupplyCompany.all.map {|u| [u.company_name.to_s, u.id]} ff.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove supplier' end f.input :product_type_id, :as => :select, :collection => ProductType.all.map {|u| [u.product_type.to_s, u.id]} f.input :product_category_id, :as => :select, :collection => ProductCategory.all.map {|u| [u.product_category.to_s, u.id]} f.input :product_colour_id, :as => :select, :collection => ProductColour.all.map {|u| [u.product_colour.to_s, u.id]} f.input :product_size_id, :as => :select, :collection => ProductSize.all.map {|u| [u.product_size.to_s, u.id]} end f.inputs "Product images" do f.has_many :product_images do |p| p.input :product_image, :as => :file, :label => "Image",:hint => image_tag(p.object.product_image.url(:thumb)) p.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove image' end end f.actions end 
0
source

Source: https://habr.com/ru/post/988286/


All Articles