2012-06-29 21 views
12

Estoy usando CanCan para autorización. Defino las reglas de usuario de acción modelo en /app/config/ability.rb y funciona bien. He agregado la línea load_and_authorize_resource a mi application_controller, y todo está hecho.CanCan y controladores sin modelos

Sin embargo, también tengo numerosas vistas y controladores que no tienen un modelo debajo. Por ejemplo, tratando de cargar una página de estadísticas da

NameError (uninitialized constant Statistic): 
    activesupport (3.2.3) lib/active_support/inflector/methods.rb:229:in `block in constantize' 
    activesupport (3.2.3) lib/active_support/inflector/methods.rb:228:in `each' 
    activesupport (3.2.3) lib/active_support/inflector/methods.rb:228:in `constantize' 
    ... 

¿Hay alguna manera de CanCan para trabajar con el controlador + acción en lugar de modelo + acción?

Respuesta

22

Use authorize_resource :class => false en su controlador. CanCan comprueba automáticamente si hay habilidades en el nombre del controlador (como un símbolo, singular, por ejemplo :statistic para la StatisticsController)

Ver https://github.com/ryanb/cancan/wiki/Non-RESTful-Controllers

+0

Si está utilizando el método load_and_authorize_resource, no es necesario mencionar class => false.cancan comprobará y lo encontrará por defecto. –

+2

@MadhanAyyasamy No lo creo – Nithin

+0

@MadhanAyyasamy load_and_authorize_resource se rompe si no le dice que no hay un modelo para ese controlador ... –

Cuestiones relacionadas