2014-10-05 6 views
8

Ho un modello di categoria e un modello di sottocategoria e un ID come l'input di selezione della sottocategoria da aggiornare a seconda delle sottocategorie associate alla categoria specifica che ho selezionato.Modulo di attivazione di Activeadmin aggiornamento a discesa

form do |f| 
    f.inputs do 
     f.input :title 
     f.input :category, as: :select, collection: Category.all, :input_html => { :class => 'chzn-select', :width => 'auto', "data-placeholder" => 'Click' } 
     f.input :sub_category, as: :select, collection: SubCategory.all, :input_html => { :class => 'chzn-select', :width => 'auto', "data-placeholder" => 'Click' } 
    end 
    f.actions 
end 

risposta

0
  1. è necessario creare un'azione membro (metodo: GET, params: l'id della categoria selezionata) nella Categoria modello di ActiveAdmin che restituisce le sottocategorie (in JSON, per esempio) appartiene alla la categoria selezionata:

    https://github.com/activeadmin/activeadmin/blob/master/docs/8-custom-actions.md#member-actions

  2. Devi usare jQuery (per exmaple) con l'Ajax, che popolano la sottocategoria selezionare l'ingresso quando Categoria selezionare l'ingresso è stato modificato:

    Populate Select box options on click with Javascript/Jquery with Json data https://forum.jquery.com/topic/best-practices-for-populating-selects-with-ajax

12

È possibile utilizzare dipende selezionare per questo scopo. Esempio è dato here

Admin attivo

ActiveAdmin.register CatalogsProduct do 
    form do |f| 
    f.inputs "Details" do 
     f.input :product, :as => :select, :collection => Product.all.collect {|product| [product.name, product.id] } 
     f.input :catalog, :as => :select, :input_html => {'data-option-dependent' => true, 'data-option-url' => '/products/:catalogs_product_product_id/catalogs', 'data-option-observed' => 'catalogs_product_product_id'}, :collection => (resource.product ? resource.product.category.catalogs.collect {|catalog| [catalog.attr_name, catalog.id]} : []) 
    end 
    f.actions 
    end 
end 

regolatore Catalogo

class CatalogsController < ApplicationController 
    respond_to :json 

    def index 
    if params[:product_id] 
     product = Product.find_by_id(params[:product_id]) 
     @catalogs = product.category.catalogs 
    else 
     @catalogs = Catalog.all 
    end 
    render :json => @catalogs.collect {|catalog| {:id => catalog.id, :name => catalog.attr_name} } 
    end 
end 
+3

Se siete pigri e vogliono solo fare le stringhe provare questo: 'f.input: lo stato, come:: selezionare , collection: (["new", "checked_in", "called", "complete"]) ' – michael