2015-06-01 25 views
6

Ürün formu aracılığıyla ürün güncellemelerini güncellemeye çalışıyorum. Form, tedarikçi tablosundaki tüm tedarikçileri gösterir, ancak birleştirme tablosunu güncellemez. Hatanın nerede bulunduğundan emin değil. Dizin ve şov, doğru ayrıntıları gösterir ancak düzenleme, birleştirme tablosunu güncellememektedir. Bu çevrede etrafta dolaşmaya başlıyor.ActiveAdmin İç İçe Form Birden çok seç

Güncelleme: Aşağıdaki formu değiştirmek bana yakın var. Ama hala birleştirme tablosunu güncelleştirmiyor. Ancak, birleştirme tablosuna satırları el ile eklediğimde silme beklendiği gibi çalışır. Onlar görüntülenir ve silinebilir. Kaydetme, yeni supply_company_id değerinin değil, yalnızca yeni product_id satırına ekler. Onun bir özellik sorunu olduğunu anlıyorum ama göremiyorum.

uygulama/modeller/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 

uygulama/modeller/supply_company.rb

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

uygulama/modeller/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 

Güncelleme: aşağıda var bana yakın formu değiştirme. Ama hala birleştirme tablosunu güncelleştirmiyor. Ancak, birleştirme tablosuna satırları el ile eklediğimde silme beklendiği gibi çalışır. Onlar görüntülenir ve silinebilir. Kaydetme, yeni supply_company_id değeri değil, yalnızca yeni product_id satırına ekler. Onun bir özellik sorunu olduğunu anlıyorum ama göremiyorum.

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 

cevap

0

Bu, multipart oldu: kodu doğru. Bir kez aşağıdaki koddan kaldırdım her şey beklendiği gibi çalıştı.

 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