如何在Rails Migration类中使用create_table这些方法?

时间:2013-03-20 21:56:35

标签: ruby-on-rails ruby ruby-on-rails-3

这是一个关于如何在Ruby中定义方法和类以及如何阅读API文档的问题。简而言之:create_table方法是如何定义/导入/继承的,因此它在ActiveRecord::Migration中可用,代码如下:

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

来自Java世界,我期望API docs提供指向定义所有内容的基类或mixin的链接。但是,如果我查看Migration的页面,我会看到一些有用的手写文档,但没有指向create_table最详细,最权威的定义的链接。我使用谷歌在ActiveRecord::ConnectionAdapters::SchemaStatements中找到它,但即使查看这两个文件的源代码:

Migration in git
create_table in git

我看不到create_tableMigration如何被纳入范围。

1 个答案:

答案 0 :(得分: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'

使其可用于迁移类。