解决方法
在ActiveRecord中,所有查询构建方法(如where,order,join,limit等)都会返回所谓的范围.只有当您调用像所有或者第一次的kicker方法,才会执行累积查询,并返回数据库中的结果.
作用域类方法也返回一个范围.返回的范围默认为空意味着结果集将不受任何限制,意味着如果执行查询,则将返回所有记录.
您可以使用它来提供一个“空”的替代方法,如在查询_by_date示例中的MurifoX.
或者您可以使用它将多个条件组合成一个方法调用,例如:
Model.scoped(:conditions => 'id < 100',:limit => 10,:order => 'title ASC') # which would be equivalent to Model.where('id < 100').limit(10).order('title ASC')
class Model scope :colored,lambda {|col| where(:color => col) } end
可以这样使用:
Model.colored
范围的好处是,您可以根据需要组合它们(几乎),所以以下是绝对可能的:
Model.red.where('id < 100').order('title ASC').scoped(:limit => 10)
我也强烈建议阅读http://guides.rubyonrails.org/active_record_querying.html