मैं महीने के हिसाब से पोस्ट को पेजिनेट करना चाहता हूं इसलिए मैंने पोस्ट मॉडल में निम्नलिखित स्कोप जोड़ा:

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

मेरे नियंत्रक में मैंने डाल दिया

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

दृश्य में

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

समस्या:

  1. पेजिनेशन महीने से काम नहीं कर रहा है, मैं एक पेज में एक महीने के सभी परिणाम दिखाना चाहता हूं, पैराम्स [: पेज] को पैराम्स [: महीना] = 2 या पैराम्स [: महीना] = फरवरी से बदल रहा है।
  2. मैं 1,2 . के बजाय 'अगस्त 2011' को कैसे देखूं
  3. लूप महीने और साल जैसे जब आप 'जनवरी 2011' में पिछले हो गए तो यह 'दिसंबर 2010' हो जाएगा
7
zoras 18 अगस्त 2011, 21:55

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि यह वास्तव में पेजिनेशन का मामला नहीं है। क्वेरी के लिए params[:month] मान से निपटना पृष्ठ ऑफ़सेट स्विचिंग से कुछ अलग है। इसके लिए आपको पेजिनेशन लाइब्रेरी की आवश्यकता नहीं हो सकती है।

बस इस तरह से उन कड़ियों को बनाने के बारे में क्या?

नियंत्रक:

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

दृश्य:

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

बेशक आप जरूरत पड़ने पर इस क्वेरी को सामान्य पेजिनेशन के साथ जोड़ सकते हैं। लेकिन उस मामले में महीने के लिंक के साथ पेजिनेशन लिंक नहीं मिलाया जाना चाहिए।

7
Akira Matsuda 19 अगस्त 2011, 12:35