2015-06-01 21 views
6

Tôi đang cố gắng để product_suppliers cập nhật thông qua biểu mẫu sản phẩm. Biểu mẫu hiển thị tất cả các nhà cung cấp trong bảng nhà cung cấp nhưng nó không cập nhật bảng nối. Không chắc chắn vị trí của lỗi. Chỉ mục và chương trình hiển thị chi tiết chính xác nhưng chỉnh sửa không cập nhật bảng tham gia. Bắt đầu đi xung quanh và xung quanh trong vòng tròn trên này.ActiveAdmin Nested Form nhiều lựa chọn

Cập nhật: Thay đổi biểu mẫu ở bên dưới đã khiến tôi đóng cửa. Nhưng vẫn không cập nhật bảng tham gia. Tuy nhiên xóa các công trình như mong đợi nếu tôi tự thêm hàng vào bảng tham gia. Chúng hiển thị và có thể bị xóa. Lưu thêm product_id mới vào hàng không phải giá trị supply_company_id được liên kết. Tôi tìm ra một vấn đề thuộc tính nhưng tôi không thể nhìn thấy nó.

app/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 

Cập nhật: Thay đổi hình thức dưới đây đã đã cho tôi gần gũi. Nhưng vẫn không cập nhật bảng tham gia. Tuy nhiên xóa các công trình như mong đợi nếu tôi tự thêm hàng vào bảng tham gia. Chúng hiển thị và có thể bị xóa. Tiết kiệm thêm sản phẩm mới_id vào hàng không phải giá trị supply_company_id được liên kết. Tôi tìm ra một vấn đề thuộc tính nhưng tôi không thể nhìn thấy nó.

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 

Trả lời

0

Hoá ra là bội số:: đúng trong mã. Khi tôi đã xóa nó khỏi mã dưới đây, mọi thứ hoạt động như mong đợi.

 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 
Các vấn đề liên quan