2011-09-03 96 views
0

我有一個rails應用程序,其中頁面有很多評論。因此,在模型中的關係是:Rails排序關係輸出

page.rb:has_many :comments

comment.rb:belongs_to :page

現在我做顯示我的觀點評論:

<% @page.comments.each_with_index do |comment| %> 
    <%= comment.comment %> 
<%end%> 

我想知道如何用will_paginate分頁。我也想讓它成爲最新的(最高ID的一個首先出現)。有任何想法嗎?

回答

0

要訂購的評論:

has_many :comments, :order => "id DESC" 

要使用will_paginate只需按邏輯到你的控制器:

@comments = @page.comments.paginate(:page => params[:page]) 
0

不知道的分頁,但你可以用這樣的順序查詢:

@page.comments.find(:all, :order => "id desc") 

也許will_paginate會照顧其餘的?

編輯:(!謝謝),按照約翰的評論Rails的3路的確是:

@page.comments.order("id desc") 
+0

看起來像約翰的答案是有點更全面:)反正我會離開我的答案。我的答案只會針對特定的查詢進行排序,而不是默認排序。 – Msencenb

+0

這個答案也很好。取決於您是否希望按id排序的評論作爲默認值。 – drummondj

+0

實際上,軌道3這樣做的方式是@ page.comments.order(「id desc」) – drummondj

0

你可以使用範圍來提供此功能。在詢問集合時,範圍本質上是過濾和/或排序ActiveRecord模型的一種方式。

範圍是Rails的2.x和3.x中之間有一點不同在Rails 2.x中,你可以使用named_scope和default_scope。

class Comment < ActiveRecord::Base 
    default_scope :order => "id DESC" 
end 

並不奇怪,default_scope定義擷取你的記錄時,如在Comment.find_by_page_id(100)使用的默認範圍。分頁應該使用您定義的默認範圍來獲取您的記錄。

在Rails 3.x的定義就像一個默認的範圍:

class Comment < ActiveRecord::Base 
    default_scope order("id DESC") 
end 

希望這有助於。