2008年5月11日星期日

RailsCasts 005 using with scope

接上回episode 004,如果我们要查top 20 tasks而非全部记录,该怎么做呢?
不妨直接告诉聪明的find_incomplete方法:
@tasks = Task.find_incomplete :limit => 20
然后在方法定义中使用with_scope:
def self.find_incomplete(options => {})
with_scope :find => options do
find_all_by_complete(false, :order => 'created_at DESC')
end
end
当然,如果不用with_scope,或者还想传order条件(上面order是写死了的),可以merge options:
def self.find_incomplete(options => {})
find_all_by_complete(false, (:order => 'created_at DESC').merge(options))
end
或者使用reverse_merge:
find_all_by_complete(false, options.reverse_merge(:order => 'created_at DESC'))

在关联查询里,也可以传options进去:
@tasks = @project.tasks.find_incomplete :limit => 20
这里的task查询在两个scope里,一个是@project限定的scope,第二个是:limit限定的scope

没有评论: