Ich versuche, die Produkt-Lieferanten über das Produktformular zu aktualisieren. Das Formular zeigt alle Lieferanten in der Lieferantentabelle an, aktualisiert jedoch die Join-Tabelle nicht. Nicht sicher, wo der Fehler liegt. Index und Show zeigen korrekte Details, aber Edit aktualisiert die Join-Tabelle nicht. Ich beginne damit, mich im Kreis zu drehen.ActiveAdmin geschachtelte Form mehrere wählen
Update: Das Ändern des Formulars auf das Unten hat mich nahe gebracht. Die Join-Tabelle wird jedoch immer noch nicht aktualisiert. Delete funktioniert jedoch wie erwartet, wenn ich der Join-Tabelle manuell Zeilen hinzufüge. Sie werden angezeigt und können gelöscht werden. Beim Speichern wird die neue product_id nur in die Zeile eingefügt, nicht jedoch der zugehörige Wert für supply_company_id. Ich denke, es ist ein Attribut, aber ich kann es nicht sehen.
app/Modelle/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/Modelle/supply_company.rb
class SupplyCompany < ActiveRecord::Base
has_many :products, :through => :product_suppliers
has_many :product_suppliers, :foreign_key => 'supply_company_id'
end
app/Modelle/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: Ändern der Form an die unten hat mich der Nähe hat. Die Join-Tabelle wird jedoch immer noch nicht aktualisiert. Delete funktioniert jedoch wie erwartet, wenn ich der Join-Tabelle manuell Zeilen hinzufüge. Sie werden angezeigt und können gelöscht werden. Speichern fügt neue product_id in die Zeile ein, nur nicht den zugehörigen Wert von supply_company_id. Ich denke, es ist ein Attribut, aber ich kann es nicht sehen.
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