2013-03-20 69 views
1

这是一个关于如何在Ruby中定义方法和类以及如何读取API文档的问题。简而言之:如何定义的create_table方法/进口/继承,因此它在ActiveRecord::Migration可用,在这样的代码:这些方法如何在Rails Migration类中使用create_table?

class CreateProducts < ActiveRecord::Migration 
    def up 
    create_table :products do |t| 
     t.string :name 
     ... 

从Java世界的到来,我预计API docs提供指向基类或混入其中,一切都被定义了。但是,如果我查看Migration的页面,我会看到一些有用的手写文档,但没有链接到create_table的最详细的权威定义。我用谷歌找到它ActiveRecord::ConnectionAdapters::SchemaStatements,但即使看着这两个文件的源代码:

Migration in git
create_table in git

我看不出create_table被带入范围在Migration。该类中动态创建

回答

1

这些方法:https://github.com/rails/rails/blob/d68e299167c8da07dc63a55197313b5c3396c3a4/activerecord/lib/active_record/migration/command_recorder.rb

它们在CommandRecorder类动态添加的,那么这行:

class Migration 
    autoload :CommandRecorder, 'active_record/migration/command_recorder' 

使其可供迁移类。

+0

我认为这些方法仅在类eval的类CommandRecorder中定义。 – Kaeros 2013-03-20 22:31:55

+0

@Kaeros感谢您的纠正,从我的手机中查看它。我相应编辑。 – fmendez 2013-03-20 22:40:01

+0

在迁移下没有加载CommandRecorder?所以我可以说'Migration :: CommandRecorder.new.create_table',但不是'Migration.new.create_table'。 – 2013-03-21 15:37:15