[英]Moving of will_paginate to model
在我的問題模型上,我有一些范圍
scope :recent, order("created_at DESC")
scope :approved, where("status = ?", "approved")
scope :answered, approved.recent.where("answers_count > ?", 0)
在我的問題控制器上,我正在使用范圍檢索問題
范例1:
@questions = Question.approved.recent
范例2:
@questions = User.find(session[:user_id]).topics.map { |t| t.questions.approved.recent }.flatten.uniq
我試圖將will_paginate放在我的模型上,以使控制器上的事情變得更容易,但是第二個示例非常棘手,因為它使用映射根據首選項來檢索問題。
我嘗試將其添加到我的模型中
def self.pagination(page = 1)
self.paginate(:page => page, :per_page => 5)
end
然后在我的控制器上
@questions = Question.approved.recent.pagination.(params[:page])
對於第一個示例,該方法工作正常,但我不知道如何在第二個示例中實施該方法
有什么提示嗎?
看起來像~> 3.0.pre2
。請確保使用~> 3.0.pre2
版本的will_paginate gem。
您可以在范圍鏈的末尾使用paginate
方法。 例如,您的“示例1”為:
@questions = Question.approved.recent.paginate(:page => params[:page], :per_page => 20)
我看到您創建了一個自定義方法( pagination
)來包裝此模式,但是最好還是暫時以原始形式保留此語法,尤其是因為您正在處理Rails 3中的作用域和Relation對象並且will_paginate沒有適當的設置對此的支持(但是即將到來)。
在“示例2”中,您似乎只需要從每個主題中獲取最近的前幾個問題,並且在這里無需進行全面的分頁(例如,轉到第2頁並繼續)。 您不必在這里使用paginate
方法; 您可以簡單地使用ActiveRecord的limit
:
current_user = User.find(session[:user_id])
@questions = current_user.topics.map { |topic|
topic.questions.approved.recent.limit(5).to_a
}.flatten.uniq
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.