创建迁移
添加/删除现有表中的字段
通过运行创建迁移:
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>