Rails Migration

alfa6661
- September 29, 2015
0 (0 votes)
Rate :
Penggunaan fungsi Migration pada Ruby On Rails

Struktur database selalu berkembang seiring kita mengembangkan dan merawat aplikasi database-driven. Misalnya, ketika saat pengembangan, kita ingin menambah sebuah tabel baru, atau setelah aplikasi sudah rampung, kita mungkin menyadari perlu menambah sebuah indeks pada sebuah kolom. Sangatlah penting untuk selalu menjaga track dari perubahan struktural database, ini yang disebut dengan migration (migrasi). Jika source code dan database tidak tersinkronisasi, besar peluangnya keseluruhan aplikasi akan rusak. Karena itulah, Rails menyediakan fungsi migrasi database yang bisa menjaga histori migrasi database, mengaplikasikan migrasi baru ataupun mengembalikannya.

Migration adalah fitur dari Active Record yang memungkinkan kita untuk mengembangkan skema database dari waktu ke waktu. Dari pada menulis modifikasi skema di SQL murni, migration memungkinkan Anda untuk menggunakan fungsi ini untuk menggambarkan perubahan pada tabel Anda.

Pembutan Migrasi

Pertama buka terminal, kemudian masuk ke root project kita. Untuk membuat sebuah migrasi baru, kita jalankan perintah ini:

rails generate migration <name>

Parameter name digunakan sebagai deskripsi yang sangat singkat tentang migrasi (misalnya create_users).

Migrasi disimpan sebagai file dalam directory db/migrate. Nama file hasil generate adalah dari YYYYMMDDHHMMSS_<name>.rb bentuk, yaitu timestamp UTC mengidentifikasi migrasi diikuti oleh garis bawah kemudian di ikuti dengan nama migrasi. Nama kelas migrasi (versi CamelCased) harus sesuai dengan bagian akhir nama file. Misalnya 20150929013143_create_users.rb harus mendefinisikan kelas CreateUsers. Rails menggunakan timestamp ini untuk menentukan migrasi harus dijalankan berurutan.

Kode diatas akan menghasilkan template untuk kode migration sebagai berikut.

class CreateUsers < ActiveRecord::Migration
  def up
  end

  def down
  end
end

Seperti kita lihat, kode diatas merupakan kode migrasi kosong. Pada kode diatas terdapat 2 method yaitu up dan down (reversible method). Method up harus mengandung code yang mengimplementasikan migrasi database aktual, sedangkan method down bisa berisi code yang me-revert apa yang telah dilakukan up.

Sebagai contoh, kita memerlukan kolom username dengan tipe data string dan email dengan tipe data string. Untuk membuat table kita perlu menggunakan method create_table pada migration diatas.

class CreateUsers < ActiveRecord::Migration
  def up
    create_table :users do |t|
      t.string :username
      t.string :email
    end
  end

  def down
    drop_table :users
  end
end

Kode diatas akan membuat table users dengan kolom id (PRIMARY KEY AUTO INCREMENT), username string dan email string. Secara default, method create_table akan membuat PRIMARY_KEY dengan kolom id. Selanjutnya gunakan perintah rake db:migrate untuk menjalankan migration. Perintah ini akan menjalankan method up di setiap kelas migrasi baru, satu per satu secara berurutan, sesuai dengan urutan nilai timestamp di dalam nama kelas. Setelah mengaplikasikan migrasi, tool migrasi akan mencatat record di sebuah table database bernama schema_migrations. Dengan demikian memungkinkan tool untuk mengidentifikasikan berapa migrasi yang telah diaplikasikan dan yang mana belum.

Me-Revert Migrations

Untuk me-revert migrasi yang paling terakhir atau beberapa migrasi yang sudah teraplikasikan, kita dapat menggunakan command berikut ini:

rake db:rollback [step]

dengan parameter opsional step menentukan berapa banyak migrasi yang ingin di-revert. Nilai default-nya adalah 1, yang artinya me-revert kembali ke migrasi yang sudah teraplikasi paling terakhir. Contoh untuk merevert 3 migration terakhir kita bisa menggunakan parameter STEP untuk melakukannya.

rake db:rollback STEP=3

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

– Eric S. Raymond

Have a better explanation?

If you have comments about this post. Please write your comments below

No comments associated with this article