2011-08-18 22 views
7

Tôi muốn đánh số trang bài viết theo tháng vì vậy tôi thêm phạm vi sau đây trong bài viết mô hìnhTháng pagination với 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 

Trong điều khiển của tôi, tôi đặt

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

Theo quan điểm

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

Sự cố:

  1. phân trang không hoạt động theo tháng, tôi muốn hiển thị tất cả kết quả của một tháng trong trang, thay thế thông số [: trang] theo thông số [: month] = 2 hoặc params [: month] = Feb
  2. tôi xem 'tháng 8 năm 2011' thay vì 1,2
  3. Vòng tháng, năm giống như khi bạn goto trong khi trước đó trong 'tháng 1 năm 2011' nó sẽ goto 'tháng 12 năm 2010'

Trả lời

7

tôi cho rằng đây không phải là thực sự là một vấn đề của phân trang. Đối phó với các tham số [: month] giá trị cho truy vấn là một cái gì đó khác với chuyển đổi bù đắp trang. Bạn có thể không cần một thư viện pagination cho điều đó.

Cách đơn giản tạo các liên kết như thế này?

điều khiển:

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

xem:

<% 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 -%> 

Tất nhiên bạn có thể kết hợp truy vấn này với pagination bình thường nếu cần thiết. Nhưng các liên kết phân trang không nên được trộn lẫn với các liên kết tháng trong trường hợp đó.