我想知道ActiveRecord::Base.connection.execute
方法是如何定义的。
所以我检查了源代码,但我不明白发生了什么。
# Executes the SQL statement in the context of this connection.
def execute(sql, name = nil)
end
undef_method :execute
也许该方法是在另一个地方动态定义的。我怎样才能找到描述该方法的地方?
我想知道ActiveRecord::Base.connection.execute
方法是如何定义的。
所以我检查了源代码,但我不明白发生了什么。
# Executes the SQL statement in the context of this connection.
def execute(sql, name = nil)
end
undef_method :execute
也许该方法是在另一个地方动态定义的。我怎样才能找到描述该方法的地方?
您显示的方法是在模块中定义的,该模块DatabaseStatements
是include
类AbstractAdapter
(connection_adapters/abstract_adapter.rb)。
AbstractAdapter
只是作为 Rails 与之互操作的不同数据库服务器的各种专用数据库适配器的基类;它不打算自行实例化。例如,execute
PostgreSQL 数据库的定义在postgresql/database_statements.rb中,作为class PostgreSQLAdapter < AbstractAdapter
.
它们在各自的适配器中定义。
适配器位于以下目录名称中,如 *_adapter.rb:
activerecord-x.x.x/lib/active_record/connection_adapters/
execute
您可以在这些文件中看到方法的定义。像:mysql_adapter.rb, postgresql_adapter.rb etc.
要知道ActiveRecord::Base.connection.execute
方法是如何定义的,您应该查看您正在使用的连接适配器类。
例如,如果您使用 mysql db(通过 mysql2 gem),您将在execute
此处找到您正在使用的方法定义:
activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb#206