Как узнать, что делают методы ActiveRecord :: Base.connection - PullRequest
4 голосов
/ 20 января 2010

Я пытаюсь найти определенные функции в документации Rails. Например, в консоли я могу ввести:

ActiveRecord :: Base.connection.tables

ActiveRecord :: Base.connection.indexes ( "sometable")

и получите список таблиц назад и список индексов. Я смотрю в Rails api doc , но не могу найти ссылку ни на один из них.

Я нахожу connection() но тропа там заканчивается! Небольшая помощь в выяснении apis!

спасибо ...

Ответы [ 3 ]

1 голос
/ 20 января 2010
# in /vendor/rails/activerecord/lib/
$ ack -a 'def indexes'
active_record/connection_adapters/mysql_adapter.rb
449:      def indexes(table_name, name = nil)#:nodoc:

active_record/connection_adapters/postgresql_adapter.rb
664:      def indexes(table_name, name = nil)

active_record/connection_adapters/sqlite_adapter.rb
233:      def indexes(table_name, name = nil) #:nodoc:

active_record/connection_adapters/abstract/schema_statements.rb
28:      # def indexes(table_name, name = nil) end

active_record/schema_dumper.rb
166:      def indexes(table, stream)

Ack лучше, чем grep , но вы также можете использовать grep, если хотите.

1 голос
/ 20 января 2010

Сначала вы можете просмотреть API Rails. В большинстве случаев это ответило бы на ваши вопросы. Но по некоторым вопросам вы застряли, как вы заметили.
Это в основном признак того, что будет трудно получить ответ, так как нет документации. Таким образом, у вас есть два варианта: не использовать метод / функцию, для которой вы искали информацию, а использовать что-то другое. Или будьте готовы потратить много времени на просмотр источников Rails на github .

Используйте что-то вроде этого Google query , чтобы получить доступ к определенной части github. Это в основном отправит вас в правильный файл, но в некотором двоичном объекте вместо главного, поэтому найдите тот же файл в главном дереве, чтобы вы знали, что искомая вещь доступна в вашем Rails (при условии, что вы используете мастер / немодифицированная версия) Следующая часть более сложная, вы уже нашли метод retrieve_connection, но он использует другой метод retrieve_connection_pool, который используется в другом файле где-то в каталоге active_record / connection_adapters (/ abstract) . Который использует какой-то другой класс, найденный в ..., и так далее ...

Эта ситуация чаще всего имеет место, если вы просматриваете источники. Через некоторое время вы, скорее всего, освоитесь с этим и станете более привыкнуть к поиску необходимых вещей. Но всегда будет много работы, чтобы найти ответ таким образом.

Так что выбор за вами, я думаю.

PS Вместо использования Rails API вы можете попробовать ввести некоторые из ваших ключевых слов ActiveRecord :: Base.connection tables indexes в Google и надеяться, что кто-то написал статью об этих предметы и сделал исследование источников Rails для вас.

1 голос
/ 20 января 2010

ActiveRecord :: Base # connection внутренне полагается на ActiveRecord :: Base.connection (метод класса), который возвращает конкретную реализацию ActiveRecord :: ConnectionAdapters :: AbstractAdapter класс.

Вы должны искать метод #indexes в вашем конкретном адаптере, например PostgreSQLAdapter # indexes .

RDoc не предоставляет никаких указаний на тип объекта, возвращаемый вызовом метода. Вы должны копаться в исходном коде или иметь глубокое понимание самого пакета. Есть альтернативы, такие как Yard , который генерирует намного более полную документацию API.

Также существует проект Rails Searchable API Doc , который предлагает API Rails с возможностью поиска. Вы можете ввести имя метода и получить список всех объектов, реализующих этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...