2010-01-20 7 views
4

J'essaie de trouver certaines fonctions dans les documents api de Rails. Par exemple, dans la console, je peux taper:Comment trouver ce que font les méthodes ActiveRecord :: Base.connection

ActiveRecord :: Base.connection.tables

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

et obtenir une liste de tables en arrière et une liste d'index. Je regarde dans le Rails api doc, mais je ne trouve aucune référence à l'un de ces éléments. Je trouve connection() mais le sentier s'arrête là! Un peu d'aide pour trouver les apis!

... merci

Répondre

1

ActiveRecord::Base#connection repose en interne sur ActiveRecord::Base.connection (méthode de classe) qui renvoient une mise en œuvre concrète de la classe ActiveRecord::ConnectionAdapters::AbstractAdapter.

Vous devez rechercher la méthode #indexes dans votre adaptateur de béton, par exemple PostgreSQLAdapter#indexes. RDoc ne fournit aucun indice sur le type d'objet renvoyé par un appel de méthode. Vous devriez creuser dans le code source ou avoir une compréhension profonde du paquet lui-même. Il existe des alternatives telles que Yard qui génère une documentation API beaucoup plus complète.

Il existe également le projet Rails Searchable API Doc qui propose une API Rails interrogeable. Vous pouvez entrer le nom de la méthode et avoir une liste de tous les objets implémentant cette méthode.

1
# 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 est better than grep, mais vous pouvez également utiliser grep si vous le souhaitez.

+0

Pourquoi utilisez-vous? Si vous utilisez simplement -a parce que vous avez des extensions de fichiers qui ne correspondent pas aux built-ins ACK, prenez le temps de définir les vôtres dans votre fichier .ackrc. –

+0

@andy hmm, jamais pris la peine de le faire, mais je vais essayer :-) – MBO

1

Vous pouvez d'abord parcourir le document API Rails. La plupart du temps cela répondrait à vos questions. Mais pour certaines questions vous êtes coincé comme vous l'avez remarqué.
Ceci est surtout un signe qu'il sera difficile d'obtenir la réponse, car aucune documentation n'est présente. Vous avez donc deux options: n'utilisez pas la méthode/fonctionnalité pour laquelle vous recherchez des informations, mais utilisez autre chose. Ou préparez-vous à passer beaucoup de temps à parcourir the Rails sources on github.

Utilisez quelque chose comme ce Google query pour accéder à la partie github particulière. Cela vous enverra principalement vers le bon fichier, mais dans un certain blob au lieu du maître, trouvez le même fichier dans l'arbre principal, ainsi vous saurez que la chose que vous recherchez est disponible dans vos Rails (en supposant que vous utilisez le version master/unmodified) La partie suivante est plus difficile, vous avez trouvé la méthode retrieve_connection maintenant, mais elle utilise une autre méthode retrieve_connection_pool, qui est utilisée dans un autre fichier quelque part dans le chemin active_record/connection_adapters (/ abstract). Qui utilise une autre classe, trouvée dans ..., et ainsi de suite ...

Cette situation est principalement le cas si vous parcourez les sources. Après un certain temps, vous allez probablement prendre le coup et devenir plus utilisé pour trouver les choses dont vous avez besoin. Mais ce sera toujours beaucoup de travail pour trouver la réponse de cette façon.

Donc le choix est à vous, je suppose.

PS Au lieu d'utiliser l'API Rails vous pouvez essayer de saisir certains de vos mots-clés ActiveRecord :: tables Base.connection index dans Google et espère que quelqu'un a écrit un article sur ces sujets et a fait la recherche source Rails pour toi.

Questions connexes