Module: DatabaseSlave::Connection
- Defined in:
- lib/database_slave/connection_handler.rb
Overview
Description
当真正要执行一条SQL语句的时候, Rails会调用
ActiveRecord::Base.connection
方法到连接池中获取一个数据库连接. 以上方法定义在:
activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
而ActiveRecord::Base.connection则调用的是:
ActiveRecord::Base.connection_handler.retrieve_connection(klass)
由此可知, 要想获取到的是从库连接而非主库连接, 那么上述方法的klass就需要传入之前建立的从库连接的class名而不是默认的self.
因此, 我们在这里重写了ActiveRecord::Base.connection方法, 在其中增加了在什么时候应该使用从库连接的判断, 并用Module#prepend方法将我们重写后的connection方法加载到ActiveRecord::Base 的前面, 以便我们重写后的connection方法比ActiveRecord::Base.connection方法先执行.
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Class Method Details
.prepended(base) ⇒ Object
63 64 65 66 67 |
# File 'lib/database_slave/connection_handler.rb', line 63 def self.prepended(base) class << base prepend ClassMethods end end |