module DatabaseSlave::Base::ClassMethods
Public Instance Methods
scoped(options = nil)
click to toggle source
为了兼容老版本
ActiveRecord::Base.using(:slave_name) do end
的写法, 这里迫不得已重写了scoped方法, 目的是:
当使用如上方式时, 将其using()方法代理到一个继承了ActiveRecord::Base的 空的具象类DatabaseSlave::NoneActiveRecord, 以便进而能够使用using方法, 因为ActiveRecord::Base是一个抽象类, 不能使用using方法.
且此种方式只能后接block, 不能用于级联式. 使用级联式会抛出异常, 具体见 ActiveRecord::Relation#using_slave中的实现.
Calls superclass method
# File lib/database_slave/base.rb, line 27 def scoped(options = nil) if self.equal? ActiveRecord::Base # Module.const_get(ActiveRecord::Base.subclasses.map(&:name).sort.first) || self DatabaseSlave::NoneActiveRecord else super end end