2

ActiveRecord::Base.connection.executeメソッドがどのように定義されているか知りたかったのです。

ソースコードを確認しましたが、何が起こっているのか理解できませんでした。

# Executes the SQL statement in the context of this connection.
def execute(sql, name = nil)
end
undef_method :execute

https://github.com/rails/rails/blob/c13284131511fb7871a85659dd0b5e821d9ad29b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb#L55

メソッドが別の場所で動的に定義されている可能性があります。メソッドが記述されている場所を見つけるにはどうすればよいですか?

4

3 に答える 3

1

あなたが示すメソッドは、クラス(connection_adapters/abstract_adapter.rb)に含まれるモジュールDatabaseStatementsで定義されています。includeAbstractAdapter

AbstractAdapterRailsが相互運用するさまざまなデータベースサーバー用のさまざまな専用データベースアダプターの基本クラスとして機能します。単独でインスタンス化することは意図されていません。たとえば、executePostgreSQL データベースの の定義は、 の一部としてpostgresql/database_statements.rbclass PostgreSQLAdapter < AbstractAdapterにあります。

于 2013-06-28T08:29:10.887 に答える
0

メソッドがどのように定義されているかを知るActiveRecord::Base.connection.executeには、使用している接続アダプター クラスを調べる必要があります。
たとえば、(mysql2 gem 経由で) mysql db を使用している場合、使用しているexecuteメソッド定義は次のとおりです。 activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb#206

于 2013-06-28T08:44:54.283 に答える
0

それらはそれぞれのアダプターで定義されます。

アダプターは、*_adapter.rb として次のディレクトリ名にあります。

activerecord-x.x.x/lib/active_record/connection_adapters/

executeこれらのファイル内のメソッドの定義を確認できます。お気に入り:mysql_adapter.rb, postgresql_adapter.rb etc.

于 2013-06-28T08:33:11.710 に答える