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