2010-05-30 77 views

回答

7
named_scope :scope_name, lambda { |category| 
    { 
     :conditions => ["id NOT IN (select foo_id from bar) AND foo.category = ?", category], 
     :order => 'RAND()', 
     :limit => 1 
    } 
    } 
4

超过一个答案评论的,但它不会真正适合...

zed_oxff是在球上。

为了简化事情并使其保持干爽,您可以考虑定义离散的命名范围而不是一个大的范围,并将它们链接在一起。

例如:

named_scope :random_order, :order => 'RAND()' 
named_scope :limit, :lambda => { |limit| :limit => limit } 
named_scope :whatever, ... 

所以,你会按如下方式使用它们:

Person.random_order.limit(3).whatever