簡體   English   中英

將will_paginate移至模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM