2014-03-06 69 views
1

我使用Kaminari分頁寶石進行分頁。我想設置起始頁面,所以默認頁面將是[0,1,2,3,4 *,5,6 ...]。Rails Kaminari分頁,設置記錄索引

我當前的頁碼代碼:

@event = Event.order(start_date: :asc).page(params[:page]).per(1) 
@items = Item.where(event_id: @event.first._id) 

我想顯示的是最當前事件的第一頁,這樣舊的事件將是前幾頁,和未來的活動將是下一個頁面。

回答

1

做到這一點的一種方式將是:

一)計數是當前日期之前的事件,如。 previous_events = Event.count(:start_date.lte => DateTime.now.utc)

b)計算覆蓋的事件數量,例如: previous_pages = previous_events/Event.default_per_page

c)將其放置到需要啓動的頁面上,例如: start_page = previous_pages.floor

然後傳遞到這個控制器代碼:

@events = Event.order(start_date: :asc).page(start_page) 
0

你的問題相當廣泛,所以我不確定你到底在找什麼。如果你只是想設置的默認頁面,你可以調用像

current_page = params[:page] ||= 4 #or whatever you want the default page to be 

@event = Event.order(start_date: :asc).page(current_page).per(1) 

UPDATE:

類似下面的答案,你可以使用在未來發生的事件,以確定你的頁面:

current_page = params[:page] ||= Event.where(:start_date > DateTime.now.utc).count #This will tell you how many events are in the future 

@event = Event.order(start_date: :asc).page(current_page).per(1) 
+0

這是接近!我想選擇當前頁面,比如'Event.where(:start_date.gte => DateTime.now.utc)' –

+0

,所以如果你有100個未來事件,你會被設置爲第100頁? – sevenseacat

+0

這是建立的方式,是的。每頁1個事件。今日事件在當前頁面上。以及「以前」頁面上的未來事件。 「下一頁」上的過去活動 – RustComet

0

分頁使用的SQL查詢將LIMIT 1 OFFSET 0添加到SQL語句的末尾。這意味着你的結果集只有1條記錄,你不知道當前事件在哪個索引處。你必須做更多的工作才能找到所有事件中的索引,然後將該索引作爲OFFSET ,即.page()方法。基本上,獲得您事件的all,找到當前的事件,然後獲取它的索引,並將該索引傳入您的page方法。這裏有一些僞代碼:

all_events = Event.order(start_date: :asc).all 
current_event = all_events.detect { |e| e.start_date.to_date == Time.now.to_date } 
index = all_events.index(current_event) 
@events = Event.order(start_date: :asc).page(params[:page] || index).per(1) 

這可能足夠接近工作。注意:此方法僅適用於您的LIMIT爲1,即您的參數爲page