2018-08-07-总结作用域
2018-08-07 本文已影响0人
护念
现在遇到的作用域主要有这么几种:控制关联作用域、model 作用域、关联作用域,下面区分下:
model 作用域
作用:获取查询数据
class User < Application
scope :active_user, ->{where(active: true)}
end
1、这个例子等价于在User中定义实例方法
2、它和实例方法区别在于,当存在条件判断时,作用域可以返回空关系(后面继续接其它方法)不报错
3、当存在参数/比较复杂时,推荐写成实例方法
控制关联作用域
作用:隔离关联/同空间关联
module Application
module Business
class Supplier < ApplicationRecord
has_one :account
end
class Account < ApplicationRecord
belongs_to : supplier
end
end
end
理解:个人认为应该是,当model比较多时,将需要建立关联的model放在相同module路径下,便于分割不同的model作用。
关联作用域
作用:关联方法查询数据
class Author < ApplicationRecord
has_many :books,->{where(published: true)}
end
理解:既然model可以通过作用域,获取数据;那么关联也可以这样快速获取数据