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?

10-02 21:21