2012-05-09 13 views
6

Nel mio modello ActiveAdmin ho un ambito personalizzato per mostrare i record cancellati e diversi filtri per cercare i record per colonne specifiche.ActiveAdmin - Utilizzo degli ambiti con i filtri

L'utilizzo dei filtri singolarmente o combinati funziona come previsto.

L'utilizzo di un oscilloscopio funziona come previsto.

Il problema è che l'utilizzo di un ambito sovrascrive apparentemente tutti i filtri e dopo aver selezionato un ambito qualsiasi filtro aggiunto non fa nulla.

Qualcuno ha qualche idea qui? Quello che voglio è essere in grado di mostrare un ambito specifico e quindi essere ancora in grado di filtrare i risultati all'interno di tale ambito.

ActiveAdmin.register Example do 
     scope :deleted do |example| 
     Example.only_deleted 
     end 

     scope :all do |example| 
     Example.with_deleted 
     end 

     filter :title 
     filter :description 

     index do 
     column :title 
     column :description 
     end 

    end 

[update]

Ecco la soluzione sono andato con. Ho impostato l'ambito with_deleted sul modello e includo il filtro sul lato per mostrare/nascondere i risultati cancellati. Non ideale poiché vengono visualizzati anche i risultati eliminati inizialmente, ma almeno tutti i filtri possono essere utilizzati insieme.

ActiveAdmin.register Example.with_deleted do 

     filter :title 
     filter :description 
     filter :deleted, :as => :select, :collection => {:true => nil, :false => false } 

     index do 
     column :title 
     column :description 
     end 

    end 
+0

Simile ma non duplicare: http://stackoverflow.com/questions/12038138/how -to-filter-is-null-in-activeadmin –

+0

Non è più un problema nell'Amministrazione attiva corrente – MikDiet

risposta

0

Invece di portata creare un altro filtro che selezionerà i record nel criterio di base se esempi vengono eliminati o tutti. E applica il maggior numero di filtri che vuoi.

Oppure nel filtro mentre si calcola il selettore su cui si eseguirà il filtro, eseguire l'oscilloscopio di conseguenza e quindi inserire le condizioni del filtro su tale selettore.

0

Per impostazione predefinita, ActiveAdmin desidera che gli ambiti forniscano solo un nome di metodo simbolizzato. Quando si definiscono gli ambiti in questo modo, possono essere concatenati all'ambito già fornito dai filtri e funzionano insieme perfettamente.

Quindi il tuo errore è chiamare esplicitamente Model#class_method invece di fornire :symbolized_class_method_name (con un proprietario implicito del modello corrente).

Filtri e gli ambiti lavoreranno insieme se si sostituisce questo codice:

scope :all do |example| 
    Example.with_deleted 
end 

scope :deleted do |example| 
    Example.only_deleted 
end 

Con questo:

scope "Deleted", :only_deleted 
scope "All", :with_deleted 
+1

Cinque anni più tardi, i documenti ActiveAdmin continuano a non risolverlo. Mi sono imbattuto nello stesso problema prima che me ne rendessi conto. – armchairdj

Problemi correlati