2012-05-09 22 views
6

En mi modelo de ActiveAdmin tengo un ámbito personalizado para mostrar registros eliminados y varios filtros para buscar registros por columnas específicas.ActiveAdmin - Uso de ámbitos con filtros

El uso de los filtros individualmente o combinados funciona como se esperaba.

El uso de un osciloscopio funciona como se esperaba.

El problema es que al usar un ámbito, aparentemente se anulan todos los filtros y después de seleccionar un ámbito, cualquier filtro agregado no hace nada.

¿Alguien tiene alguna idea aquí? Lo que quiero es poder mostrar un alcance específico y aún así poder filtrar resultados dentro de ese alcance.

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 

[Actualización]

Aquí está la solución que he ido con. Establecí el alcance with_deleted en el modelo e incluyo el filtro en el lateral para mostrar u ocultar los resultados eliminados. No es ideal ya que los resultados eliminados inicialmente también se muestran, pero al menos todos los filtros se pueden usar juntos.

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

similares pero no duplicar: http://stackoverflow.com/questions/12038138/how -to-filter-is-null-in-activeadmin –

+0

Ya no es un problema en la administración activa actual – MikDiet

Respuesta

0

En lugar del alcance crea otro filtro que seleccionará los registros según el criterio en función de si se eliminan los ejemplos o de todos. Y aplique tantos filtros como desee.

O en el filtro mientras calcula el selector en el que ejecutará el filtro, ejecute el alcance en consecuencia y luego ponga las condiciones del filtro en ese selector.

0

De forma predeterminada, ActiveAdmin quiere que los ámbitos simplemente proporcionen un nombre de método simbolizado. Cuando define los ámbitos de esta manera, pueden encadenarse al alcance proporcionado por los filtros y funcionan juntos sin problemas.

Así que su error es llamar explícitamente a Model#class_method en lugar de proporcionar :symbolized_class_method_name (con un propietario implícito del modelo actual).

Filtros y alcances trabajarán conjuntamente si se reemplaza este código:

scope :all do |example| 
    Example.with_deleted 
end 

scope :deleted do |example| 
    Example.only_deleted 
end 

Con esta:

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

Cinco años después, los documentos de ActiveAdmin aún no abordan esto. Me encontré con el mismo problema antes de darme cuenta. – armchairdj

Cuestiones relacionadas