2

Я работаю над созданием has_many: через отношения в активном админе. Вот модели, как они стоят:ActiveAdmin has_many через отношения, не обновляющие param Rails

class Category < ActiveRecord::Base 
    has_many :subcategories 
end 

class Subcategory < ActiveRecord::Base 
    has_many :product_in_subcategories 
    has_many :products, through: :product_in_subcategories 
    accepts_nested_attributes_for :product_in_subcategories, :allow_destroy => true 

    belongs_to :category 
end 

class Product < ActiveRecord::Base 
    has_many :product_in_subcategories 
    has_many :subcategories, through: :product_in_subcategories 
    accepts_nested_attributes_for :product_in_subcategories, :allow_destroy => true 
end 

class ProductInSubcategory < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :subcategory 
end 

В ActiveAdmin У меня есть permit_params и образуют таким образом:

ActiveAdmin.register Product do 
    # note some params that are product only have been removed for simplicity 
    permit_params :name, subcategory_id:[:id], product_in_subcategories_attributes: [:id, :subcategory_id, :product_id, :_create, :_update] 

    form do |f| 
     f.inputs 

     f.has_many :product_in_subcategories do |s| 
      s.input :subcategory_id, :as => :check_boxes, :collection => Subcategory.all 
     end 

     f.actions 
    end 
end 

Форма населяет, как следует, и сохранит все за subcategory_id исключением. Если я вхожу в БД, то соответствующая подкатегория_id отобразит флажок в поле редактирования.

Сообщения при сохранении дают:

Unpermitted parameters: subcategory_id 

Однако представляется, он пытается представить это с продуктом, для которого не является subcategory_id. Любые идеи о том, что я делаю неправильно здесь? Это сводит меня с ума, и я читаю все, что могу найти. Мне бы очень хотелось понять, что я делаю неправильно. Благодарю.

ответ

2

После долгого времени, проведенного на этом, я не нашел подходящего решения, кроме этого, что на самом деле очень приятно. Это на самом деле не сильно отличается от моего предусмотренного решения:

Единственные изменения в коде выше были сделаны в ActiveAdmin:

ActiveAdmin.register Product do 
    # note some params that are product only have been removed for simplicity 
    permit_params :name, product_in_subcategories_attributes: [:id, :subcategory_id, :product_id, :_create, :_update] 

     form do |f| 
     f.inputs 

     f.has_many :product_in_subcategories do |s| 
      s.input :subcategory_id, :as => :select, :collection => Subcategory.all 
     end 

     f.actions 
     end 
end 

Очень странно, как это позволяет поле выбора без каких-либо проблем, но он переворачивается установите флажки. Тем не менее, я доволен решением.

+0

Любое решение с чекбоксами? –

+1

Честно говоря, я закатил собственный камень, чтобы админ был быстрым и настраиваемым без DSL. Вы можете найти его в [SkinnyAdmin] (https://www.skinnyadmin.org). Ничего плохого в ActiveAdmin, но DSL - головная боль для меня. – user1572597