建立遷移
新增/刪除現有表中的欄位
通過執行建立遷移:
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>