iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

Ruby on Rails JS系列 第 7

Rails Migration 可用的方法

在上述change方法裡,我們有以下方法可以使用:

對資料表做修改:

create_table(name, options) 新增資料表
drop_table(name) 移除資料表
rename_table(old_name, new_name) 修改資料表名稱
change_table 修改資料表欄位

個別修改資料表欄位:

add_column(table, column, type, options) 新增一個欄位
rename_column(table, old_column_name, new_column_name) 修改欄位名稱
change_column(table, column, type, options) 修改欄位的型態(type)
remove_column(table , column) 移除欄位

新增、移除索引:

add_index(table, columns, options) 新增索引
remove_index(table, index) 移除索引
options 可為空,或是:unique => true表示這是唯一。

新增、移除外部鍵限制:

add_foreign_key(from_table, to_table, options)
remove_foreign_key(from_table, to_table, options)
options 可為空,或是可自定:column => from_table_foreign_key_column (預設是{to_table}_id)和:primary_key => to_table_primary_key_column(預設是id)。

新增和移除 Table

執行 rails g model 時,Rails就會順便新增對應的 Migration 檔案。以上一章產生的categories migration為例:

class CreateCategories < ActiveRecord::Migration[5.1]
    def change
        create_table :categories do |t|
          t.string :name
          t.integer :position
          t.timestamps
        end

        add_column :events, :category_id, :integer
        add_index :events, :category_id
    end
end

其中的 timestamps 會建立叫做 created_at 和 updated_at 的時間欄位,這是Rails的常用慣例。它會自動設成資料新增的時間以及會後更新時間。

修改 Table

我們來試著新增一個欄位吧:

rails g migration add_description_to_categories
打開 db/migrate/20110411163049_add_description_to_categories.rb

class AddDescriptionToCategories < ActiveRecord::Migration[5.1]
  def change
    add_column :categories, :description, :text
  end
end

完成後,執行 rails db:migrate便會實際在資料庫新增這個欄位。

參考資料

[Rails 實戰聖經] https://ihower.tw/rails/migrations.html


上一篇
Rails 如何新增 Migration 檔案
下一篇
Ruby 實體變數(instance variable)
系列文
Ruby on Rails JS29

尚未有邦友留言

立即登入留言