scope一般用在model中
- default_scope
設(shè)置了default_scope
后,每次調(diào)用model,都會(huì)先查詢出scope的結(jié)果集,然后再該結(jié)果集上進(jìn)行操作。
class Order < ActiveRecord::Base
default_scope -> { order(created_at: :desc) }
end
此時(shí)調(diào)用Order.all
,會(huì)把order
按照created_at
這個(gè)字段進(jìn)行倒序排列。
如果有多個(gè)default_scope
,那么這些default_scope
會(huì)一起生效
class Order < ActiveRecord::Base
default_scope -> { order(created_at: :desc) }
default_scope -> { where(price: 100..1000) }
end
此時(shí)調(diào)用Order.all
,則會(huì)把price
在100到1000之間的order
查詢出來(lái),然后再按照created_at
這個(gè)字段進(jìn)行倒序排列。
-
scope
看下面的代碼class Order < ActiveRecord::Base scope :today, -> { where(created_at: Time.now.midnight..(Time.now.midnight + 1.day)) }
end
`Order`中定義了一個(gè)`today`的`scope`,如何調(diào)用這個(gè)`scope`?
```ruby
Order.today
這樣就可以了。感覺(jué)scope
相當(dāng)于一個(gè)類方法
class Order < ActiveRecord::Base
private
def self.today
Order.where(created_at: Time.now.midnight..(Time.now.midnight + 1.day))
end
end