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可以通过作用域,获取数据;那么关联也可以这样快速获取数据

上一篇 下一篇

猜你喜欢

热点阅读