scope

scope一般用在model中

  • default_scope
    设置了default_scope后,每次调用model,都会先查询出scope的结果集,然后再该结果集上进行操作。
class Order < ActiveRecord::Base
    default_scope -> { order(created_at: :desc) }
end

此时调用Order.all,会把order按照created_at这个字段进行倒序排列。
如果有多个default_scope,那么这些default_scope会一起生效

class Order < ActiveRecord::Base
      default_scope -> { order(created_at: :desc) }
      default_scope -> { where(price: 100..1000) }
end

此时调用Order.all,则会把price在100到1000之间的order查询出来,然后再按照created_at这个字段进行倒序排列。

  • scope
    看下面的代码

    class Order < ActiveRecord::Base
      scope :today, -> { where(created_at: Time.now.midnight..(Time.now.midnight + 1.day)) }
    

end

`Order`中定义了一个`today`的`scope`,如何调用这个`scope`?
```ruby
Order.today

这样就可以了。感觉scope相当于一个类方法

class Order < ActiveRecord::Base
  private
  def self.today
    Order.where(created_at: Time.now.midnight..(Time.now.midnight + 1.day))
  end
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。