建立遷移

新增/刪除現有表中的欄位

通過執行建立遷移:

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>