2011-05-11 18 views
6

Estoy buscando hacer paginación con cancan sin embargo, no es obvio cómo integrar esto con gemas como will_paginate.¿Cómo hacer la paginación con cancan?

Lo ideal es que load_resource de cancan delegue en will_paginate y agregue condiciones adicionales. Por ejemplo, en cancán he declarado usuarios invitados

can :read, Post, :published => true 

y esto es manejado automáticamente por load_resource. Sin embargo, me gustaría tener la página will_paginate en todos estos resultados.

Cualquier idea.

Saludos

Brad

Respuesta

10

Esto es fácil de hacer con kaminari https://github.com/amatsuda/kaminari

en mi PostsController acabo de hacer

before_filter :load_by_pagination, :only => :index 
    def load_by_pagination 
    @posts = Post.accessible_by(current_ability).order("published_date desc").page params[:page] 
    end 

Tenga en cuenta que kaminari funciona correctamente con el nuevo marco rails3 ActiveRelation entonces es posible encadenar métodos juntos para construir el alcance. Y como CanCan también es compatible con ActiveRelation, ambos simplemente encadenan juntos.

6

También puede hacer algo como esto:

class PostsController 

    def index 
    @posts = @posts.page(params[:page])  
    ... 
+0

Sí, pero si no es accesible, conjuntos @posts cancan a cero y se acaba el mundo ... ¿O hay otra manera? – pitosalas

+0

esto debe evitarse a menos que desee extraer todos los @posts de la base de datos antes de la búsqueda. –

Cuestiones relacionadas