2008-11-28 39 views
3

在ActiveRecord模型中訪問has_many關係時是否有快捷方式給出限制和順序?指定訪問has_many關係時的順序和限制的快捷方式?

例如,這裏是希望我來表達:

@user.posts(:limit => 5, :order => "title") 

與之相對較長的版本:

Post.find(:all, :limit => 5, :order => "title", :conditions => ['user_id = ?', @user.id]) 

我知道你可以直接在的has_many關係指定,但有沒有辦法做到這一點,如在一個頁面上顯示10個帖子,但只有3個在另一個頁面上?

回答

8

我有一個博客模式類似:

has_many :posts, :class_name => "BlogPost", :foreign_key => "owner_id", 
    :order => "items.published_at desc", :include => [:creator] do 
     def recent(limit=3) 
     find(:all, :limit => limit, :order => "items.published_at desc") 
     end 
    end 

用法:

Blog.posts.recent 

Blog.posts.recent(5) 
1

您可以使用瑞安英對照精華文章的utility_scopes。安裝(這是一個寶石)後,你會得到一些有用的新領域,如:

@user.posts.ordered('title ASC').limited(5) 

你甚至可以爲任何模型默認順序和限制。

3

可以使用在後模型名爲範圍做到這一點:

class Post < ActiveRecord::Base 
    named_scope :limited, lambda {|*num| {:limit => num.empty? ? DEFAULT_LIMIT : num.first}} 
end 

這是基本相似utility_scopes,由@Milan報道,除非你做零碎,只在你需要做的它。