2012-01-28 11 views
6

Estoy intentando anular la acción de índice del controlador ActiveAdmin para que muestre resultados para el usuario actual en lugar de todos los resultados.ActiveAdmin: cómo anular la acción del controlador de índice: método no definido `base 'para nil: NilClass

controller do 
    def index 
    @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) 
    end 
end 

Al acceder ActiveAdmin, una excepción en tirado:

ActionView::Template::Error (undefined method `base' for nil:NilClass): 
    1: render renderer_for(:index) 

estoy usando carriles de 3.1 y la versión más reciente ActiveAdmin. gem "activeadmin", :git => 'https://github.com/gregbell/active_admin.git'.

Respuesta

4

Esto ya no es necesario.

ActiveAdmin 0.4.4 ahora admite consultas de ámbito sin anular este método. consulte aquí: http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries

Si los administradores tienen diferentes niveles de acceso, a veces se puede desear alcance lo que tienen acceso. Asumiendo que su modelo de usuario ha las relaciones adecuadas has_many, sólo tiene alcance los listados y buscadores, así:

ActiveAdmin.register Post do 
    scope_to :current_user 

    # or if the association doesn't have the default name. 
    # scope_to :current_user, :association_method => :blog_posts 
end 
+0

acaba de agregar esta importante distinción: esto insiste en que existe una asociación con el usuario_actual. Si el modelo de usuario no tiene una asociación definida con el modelo actual, esto no va a funcionar. Tampoco usará scope_to con un bloque. – wkhatch

8

No sé por qué, pero

controller do 
    def index 
     index! do |format| 
     @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) 
     format.html 
     end 
    end 
end 

hizo el truco.

+0

esto funcionó para mí también http://stackoverflow.com/questions/13116244 –

+0

¿cómo se llega a esto? –

2

Let anulan la acción de la siguiente manera:

controller do 
    def scoped_collection 
    # some stuffs 
    super.where("type = ?", "good") 
    end 

    # other stuffs 
end 

De esta manera, también puede ejecutar las funciones de exportación (a xml, csv, ...) normalmente con una nueva colección que haya anulado.

En mi prueba, solo funciona para el estado y el alcance, no por el límite.

Consulte de esto: https://github.com/activeadmin/activeadmin/issues/642

Cuestiones relacionadas