领域
class Comment < ActiveRecord::Base
scope :most_recent, -> (limit) { order("created_at desc").limit(limit) }
end
使用范围
@recent_comments = Comment.most_recent(5)
分类方法
在模型中
def self.most_recent(limit)
order("created_at desc").limit(limit)
end
在控制器中
@recent_comments = Comment.most_recent(5)
当你可以使用常规的Ruby类方法时,为什么要使用作用域?
最佳答案 我认为使用范围的最大原因是因为它总是会返回一个ActiveRecord :: Relation,即使范围的计算结果为nil,也不像class方法.除非调用范围,否则还可以向范围中添加特定方法,这些方法不会出现在类中.
scope :lovely, -> name { where(name: name) if name.present? }
如果没有名字,这将返回集合.但是在类方法中,你必须做这样的事情
def self.lovely(name)
if name.present?
where(name: name)
else
all
end
end
您可以在此处找到更多范围文档:Active Record scopes vs class methods和此处:Should You Use Scopes or Class Methods?和ActiveRecord::Scoping::Named::ClassMethods