2011-08-18 2 views
7

Je veux paginera messages par mois, donc j'ajouté champ suivant dans le modèle postpagination mois avec Kaminari

class Post 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    scope :by_month, lambda {|end_date| Post.order_by(:created_at => :asc).where(:created_at.gte => (end_date.to_date.beginning_of_month), :created_at.lte => (end_date.to_date))} 
end 

Dans mon contrôleur je mets

def show 
    @posts = Post.by_month(Time.now).page(params[:page]).per(20) 
end 

Vu

<%= paginate @posts, :theme => 'month_theme' %> 
<%= render @posts %> 

Problèmes:

  1. pagination ne fonctionne pas par mois, je veux montrer tous les résultats d'un mois dans une page, remplaçant params [: page] par params [: mois] = 2 ou params [: mois] = fév
  2. Comment faire Je considère « Août 2011 » au lieu de 1,2
  3. mois et l'année en boucle comme quand vous goto tout précédent Jan 2011 'il sera goto « décembre 2010 »

Répondre

7

Je suppose que ce n'est pas vraiment une question de pagination. Traiter la valeur params [: month] pour la requête est quelque chose de différent de la commutation de décalage de page. Vous pourriez ne pas avoir besoin d'une bibliothèque de pagination pour cela.

Que diriez-vous simplement de créer ces liens comme ceci?

contrôleur

:

@posts = Post.by_month(Time.parse(params[:month]) || Time.now) 

Vue:

<% Post.only(:created_at).map {|p| p.created_at.to_date.beginning_of_month}.uniq.sort.each do |m| -%> 
    <%= link_to_unless_current m, :month => m %>&nbsp; 
<% end -%> 

Bien sûr, vous pouvez combiner cette requête avec la normale si nécessaire pagination. Mais les liens de pagination ne doivent pas être mélangés avec les liens du mois dans ce cas.

Questions connexes