Rails guides表示可以在关联上调用作用域。但是接着further on,它声明返回一个scoped
对象的ActiveRecord::Relation
方法“可能在关联中派上用场……”。如果可以在关联上调用作用域,则scoped
提供了哪些附加功能?
最佳答案
scoped
返回匿名作用域。从API文档:
在过程式生成复杂查询时,匿名作用域往往会很有用,在这种情况下,将中间值(范围)作为第一类对象传递很方便。
例子如下:
posts = Post.scoped
posts.size # Fires "select count(*) from posts" and returns the count
posts.each {|p| puts p.name } # Fires "select * from posts" and loads post objects
fruits = Fruit.scoped
fruits = fruits.where(:color => 'red') if options[:red_only]
fruits = fruits.limit(10) if limited?