Γρήγορη αναφορά

Συνοπτικός οδηγός μεταναστεύσεων βάσης δεδομένων Rails

Ένας γρήγορος οδηγός αναφοράς για μεταναστεύσεις βάσης δεδομένων Rails: create_table, τύποι στηλών, ξένα κλειδιά, σύνθετα ευρετήρια και αναστρέψιμες αλλαγές.

· Δημοσιεύτηκε

Οι μεταναστεύσεις Active Record σάς επιτρέπουν να εξελίσσετε το σχήμα της βάσης δεδομένων με την πάροδο του χρόνου χρησιμοποιώντας ένα DSL της Ruby χωρίς να γράφετε DDL εντολές SQL.

Εργαλεία παραγωγής μεταναστεύσεων (CLI)

# Δημιουργία μετανάστευσης για νέο πίνακα
bin/rails g migration CreateArticles title:string body:text published:boolean

# Δημιουργία μετανάστευσης προσθήκης στήλης
bin/rails g migration AddViewsToArticles views:integer

# Δημιουργία πίνακα σύνδεσης (join table)
bin/rails g migration CreateJoinTableUsersProjects users projects

# Εκτέλεση εκκρεμών μεταναστεύσεων
bin/rails db:migrate

# Επαναφορά του τελευταίου βήματος μετανάστευσης
bin/rails db:rollback STEP=1

Δημιουργία πινάκων (create_table)

class CreateUsers < ActiveRecord::Migration[7.1]
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.string :email, index: { unique: true }
      t.text :bio
      t.integer :login_count, default: 0
      t.decimal :balance, precision: 10, scale: 2
      t.boolean :active, default: true, null: false
      t.jsonb :preferences, default: {}

      # Αναφορά ξένου κλειδιού
      t.references :organization, null: false, foreign_key: true

      t.timestamps # timestamps: created_at & updated_at
    end
  end
end

Τροποποίηση στηλών και πινάκων

class AlterArticles < ActiveRecord::Migration[7.1]
  def change
    add_column :articles, :status, :string, default: "draft"
    remove_column :articles, :legacy_field, :string

    change_column_null :articles, :title, false
    change_column_default :articles, :views, from: nil, to: 0

    rename_column :articles, :author, :writer
    add_index :articles, [:status, :created_at]
  end
end

Αναστρέψιμες μεταναστεύσεις (Reversible)

def change
  reversible do |dir|
    dir.up do
      execute "CREATE EXTENSION IF NOT EXISTS citext;"
    end
    dir.down do
      execute "DROP EXTENSION IF EXISTS citext;"
    end
  end
end

Πηγές & Αναφορές

Σχετικά θέματα