如何找到ActiveRecord :: Base.connection方法的功能

时间:2010-01-20 08:58:42

标签: ruby-on-rails api

我试图在Rails api文档中找到某些函数。例如,在控制台中我可以输入:

  

的ActiveRecord :: Base.connection.tables

     

的ActiveRecord :: Base.connection.indexes( “sometable”)

并获取一个表列表和一个索引列表。我查看Rails api doc, 但找不到任何参考。

我找到了connection()但是那条小路就在那里结束了!有点帮助搞清楚api!

感谢...

3 个答案:

答案 0 :(得分:1)

ActiveRecord::Base#connection内部依赖于ActiveRecord::Base.connection(类方法),它返回ActiveRecord::ConnectionAdapters::AbstractAdapter类的具体实现。

您应该在具体适配器中搜索#indexes方法,例如PostgreSQLAdapter#indexes

RDoc不提供方法调用返回的对象类型的任何提示。您应该深入了解源代码或深入了解包本身。 还有Yard等替代方法可以生成更完整的API文档。

还有Rails Searchable API Doc项目提供可搜索的Rails API。 您可以输入方法名称并列出实现该方法的所有对象。

答案 1 :(得分: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是better than grep,但如果你愿意,也可以使用grep。

答案 2 :(得分:1)

首先,您可以浏览Rails api doc。大多数时候,这会回答你的问题。但是对于一些问题,你会在你注意到的时候陷入困境 这主要表明很难得到答案,因为没有文件存在。所以你有两个选择:不要使用你正在寻找信息的方法/功能,而是使用别的东西。或者准备好花大量时间浏览the Rails sources on github

使用类似Google query的内容来访问特定的github部分。这将主要发送给你正确的文件,但在某些blob而不是master,所以在主树中找到相同的文件,所以你知道你正在寻找的东西在你的Rails中可用(假设你正在使用主/未修改版本) 下一部分比较困难,你现在找到了retrieve_connection方法,但它使用了另一种方法retrieve_connection_pool,它在 active_record / connection_adapters(/ abstract)中的某个地方使用目录路径。哪个是使用其他类,在...中找到,等等......

如果您浏览来源,则会出现这种情况。过了一段时间,你可能会掌握它并变得更习惯于找到你需要的东西。但以这种方式找到答案总是需要做很多工作。

所以我猜是你的选择。

PS 您可以尝试在Google中键入一些 ActiveRecord :: Base.connection表索引,而不是使用Rails API,希望有人写一篇文章在这些主题上,Rails为你做了研究。