创建迁移

添加/删除现有表中的字段

通过运行创建迁移:

rails generate migration AddTitleToCategories title:string

这将创建一个迁移,将 title 列添加到 categories 表:

class AddTitleToCategories < ActiveRecord::Migration[5.0]
  def change
    add_column :categories, :title, :string
  end
end

同样,你可以生成迁移以删除列:rails generate migration RemoveTitleFromCategories title:string

这将创建一个从 categories 表中删除 title 列的迁移:

class RemoveTitleFromCategories < ActiveRecord::Migration[5.0]
  def change
    remove_column :categories, :title, :string
  end
end

虽然严格来说,删除列不需要指定类型 (在这种情况下为:string) ,但它很有用,因为它提供了回滚所需的信息。 **** **** ****

创建一个表

通过运行创建迁移:

rails g CreateUsers name bio

Rails 识别从 Create 前缀创建表的意图,其余的迁移名称将用作表名。给出的示例生成以下内容:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :bio
    end
  end
end

请注意,创建命令未指定列的类型,并且使用了默认的 string

创建连接表

通过运行创建迁移:

rails g CreateJoinTableParticipation user:references group:references

Rails 通过在迁移名称中查找 JoinTable 来检测创建连接表的意图。其他所有内容都取决于你在名称后面提供的字段的名称。

class CreateJoinTableParticipation < ActiveRecord::Migration
  def change
    create_join_table :users, :groups do |t|
      # t.index [:user_id, :group_id]
      # t.index [:group_id, :user_id]
    end
  end
end

取消注释必要的 index 语句并删除其余语句。

优先权

请注意,示例迁移名称 CreateJoinTableParticipation 与表创建规则匹配:它具有 Create 前缀。但它并没有产生一个简单的 create_table。这是因为迁移生成器( 源代码 )使用以下列表的第一个匹配项:

  • (Add|Remove)<ignored>(To|From)<table_name>

  • <ignored>JoinTable<ignored>

  • Create<table_name>