Minggu, 01 April 2018

Seri Belajar Ruby on Rails Bagian 6 - Membuat Table & Dummy Data

Setelah belajar membuat aplikasi tugas sederhana melalui scaffold, selanjutnya pada pembahasan kali ini adalah table dan dummy data. Untuk pembahasan kali ini gunakan project sebelumnya, karena kita akan melanjutkan aplikasi tersebut menjadi aplikasi yang lebih terpadu.

A. Definisi Table di Database

Kata database dan table sudah sering kita dengar. Database secara singkat dianalogikan seperti lemari arsip yang berfungsi untuk menyimpan data. Lalu table adalah arsip, dimana dalam arsip tersebut terdapat data-data tertentu. 


B. Membuat Table di Rails Framework

Rails menyediakan fitur untuk melakukan pembuatan table, penambahan kolom pada table, dsb dengan menggunakan migration. Migration di Rails disimpan dalam folder db/migrate. Untuk membuat file migrasi telah dijelaskan di Seri Belajar Ruby on Rails Bagian 5 - Membuat Aplikasi Rails Pertamamu dengan cara
$ rails generate migration CreateCategories
Yang akan dihasilkan oleh generator adalah file migration di folder db/migrate dengan nama create_categories.rb. Isi dari file tersebut adalah seperti berikut.


Penjelasan:
  1. Ketika membuat migration dengan nama CreateCategories, pada file migrasi akan dibuat menjadi class dengan nama  CreateCategories.
  2. Pada bagian ActiveRecord, ini dimaksudkan bahwa migration termasuk dalam bagian ActiveRecord Rails.
  3. def change
    
    end
    Method ini harus ada sebelum menulis script untuk membuat table.
    Selain method change terdapat method lain, yaitu method up dan down. Sehingga struktur file migrasi menjadi seperti berikut. Method up dan down digunakan ketika akan melakukan perubahan pada tabel.

  4. create_table :categories do |t|
    Bagian ini artinya yang akan dilakukan adalah membuat table dengan nama categories sesuai dengan apa yang ditulis, yaitu :categories pada file migrasi. Jangan lupa akhiri dengan end.
File migrasi kategori untuk aplikasi manajemen tugas sederhana telah selesai dibuat. Selanjutnya kita tambahkan script untuk menulis kolom-kolom yang dibutuhkan pada tabel categories beserta tipe datanya.

Selain dengan cara tersebut, untuk menambahkan kolom pada tabel categories juga dapat dilakukan dengan cara menuliskan script berikut ketika proses membuat file migrasi. Contohnya seperti berikut.
$ rails generate migration CreateCategories name:string


Tips:
Ketika melakukan pembuatan tabel, usahakan tambahkan juga kolom yang nantinya akan menjadi index pada tabel. Index ini nantinya berfungsi jika melakukan pencarian data pada tabel tersebut dapat dilakukan menjadi lebih cepat dan efisien.

C. Migrasi di Rails yang Perlu Diketahui

Migrasi di Rails tidak hanya untuk membuat table saja, namun juga dapat mengubah, menambahkan, atau bahkan menghapus kolom. 

Jika pembuatan migrasi dilakukan dengan menggunakan generator, penamaan file migrasi juga dapat menjadi jalan cepat untuk mendefinisikan apa yang akan dilakukan oleh file migrasi tersebut. 

Contohnya seperti berikut.
  1. Membuat table
    Kata kunci untuk nama file adalah CreateXXX.
    $ rails generate migration CreateCategories
    maka akan menghasilkan


  2. Menambahkan kolom ke tabel
    Kata kunci untuk nama file adalah AddXXXToXXX.
    $ rails generate migration AddDescriptionToCategories
    maka akan menghasilkan


    $ rails generate migration AddDescriptionToCategories description:text
    maka akan menghasilkan


  3. Menghapus kolom pada tabel
    Kata kunci untuk nama file adalah RemoveXXXFromXXX.
    $ rails generate migration RemoveDescriptionFromCategories
    maka akan menghasilkan


    $ rails generate migration RemoveDescriptionFromCategories description:text
    maka akan menghasilkan


D. Tipe Data di Rails Migration

Saat membuat file migrasi di Rails, yang harus diperhatikan adalah tipe data yang digunakan. Apakah itu string, text, atau integer, dsb. Berikut ini adalah tipe data yang diperbolehkan pada migrasi Rails.
  • :string, 
  • :text,
  • :integer, 
  • :float, 
  • :decimal, 
  • :datetime, 
  • :timestamp, 
  • :time, 
  • :date,
  • :binary, 
  • :boolean.
Contohnya seperti gambar berikut ini yang ditunjukkan dari file migrasi homework di Seri Belajar Ruby on Rails Bagian 5 - Membuat Aplikasi Rails Pertamamu.


E. Change Method

Change method merupakan cara utama untuk menulis migrasi di Rails. Namun change method ini hanya bisa dilakukan pada definisi migrasi berikut.
  • add_column
  • add_foreign_key
  • add_index
  • add_reference
  • add_timestamps
  • change_column_default
  • change_column_null
  • create_join_table
  • create_table
  • disable_extension
  • drop_join_table
  • drop_table
  • enable_extension
  • remove_column
  • remove_foreign_key
  • remove_index
  • remove_reference
  • remove_timestamps
  • rename_column
  • rename_index
  • rename_table

Berikut merupakan beberapa contoh definisi migrasi di atas.




F. Modifiers di Rails Migration 

Ketika melakukan perubahan kolom atau penambahan kolom, terkadang kolom tersebut membutuhkan modifier. Modifier ini berguna untuk mengatur apakah kolom tersebut boleh kosong atau tidak, apakah kolom tersebut sebagai index, apakah kolom tersebut dibatasi maksimum karakternya, dsb. Pada intinya modifier diibaratkan sebagai ketentuan yang bersifat opsional pada sebuah kolom.
  • limit: Menentukan maksimum size dari kolom string/text/binary/integer.
  • precision: Mendefinisikan presisi dari kolom desimal
  • scale: menunjukkan berapa digit yang muncul setelah tanda (,)
  • polymorphic: Menambahkan sebuah kolom untuk hubungan belongs_to (ada kaitannya dengan join)
  • null: Mengizinkan atau tidak mengizinkan suatu kolom bernilai NULL
  • default:Mengizinkan untuk memberikan nilai default pada sebuah kolom ketika kolom tersebut tidak diisi.
  • index:Menambahkan index pada suatu kolom.
  • comment: Menambahkan komentar untuk sebuah kolom.

Setelah mengetahui beberapa hal tentang migrasi, selanjutnya yang akan dibahas adalah mengenai dummy data di Rails.

G. Apa itu Dummy Data ?

Dummy data  diibaratkan seperti data fake atau data palsu yang dibuat untuk tujuan melakukan testing data. Lalu, bagaimana melakukannya di Rails project ?. 

Tujuan utama adanya Rails migration, selain untuk alter kolom dan table, migration di Rails juga berfungsi untuk menambah atau mengubah data. Untuk menambahkan data pada Rails, Rails menyediakan 'seeds' built-in yang membuat proses penambahan atau pengubahan data fake menjadi lebih cepat.

Untuk melakukan seeding di Rails, dapat dilakukan di seeds.rb yang berada di folder db/seeds.rb. 

Setelah itu untuk memproses seed yang sudah ditulis, lakukan dengan cara
$ rake db:seed
Untuk melihat apakah proses seeding berhasil, dapat dilakukan dengan mengunakan rails console.

Rails console ini adalah tools seperti irb (interactive ruby), namun bedanya ini tidak mengeksekusi script ruby saja, bahkan script Rails pun dapat dieksekusi. Caranya dengan menjalankan perintah berikut pada terminal.
$ rails c

Lalu jalankan
$ category = Category.all



H. Seed dan Data Master

Selain terdapat data dummy, dalam suatu database pasti terdapat data master. Apa itu data master ?. Data master diibaratkan seperti data induk dari data pada table lain. 
Contohnya, pada jika terdapat tabel city(kota), tabel tersebut bisa menjadi data master, karena penambahan datanya hanya dilakukan sekali. Jika dilakukan proses penambahan lagi pun bisa dilakukan manual. 

Mengapa seperti itu ?. Karena jika dipikirkan kota di Indonesia misalnya, pasti tidak akan bertambah tiap tahun bukan ?. Inilah sebabanya mengapa tabel city bisa menjadi data master.

Untuk melakukan penambahan data master ini, banyak pengembang yang menggunakan fitur seed dari Rails, karena berpikir seed memang bertujuan untuk menambah atau mengubah data. 

Namun, ini merupakan hal yang tidak boleh dilakukan, karena pada dasarnya seed itu fitur pada Rails yang berguna untuk membuat data fake. Data master bukanlah data fake, jadi hindari membuat data master dengan seeding.

Kesimpulannya, Rails sangat memudahkan para penggunanya dalam banyak hal, seperti pada cara pembuatan tabel, alter table, ataupun penambahan dan pengubahan data untuk melakukan testing pada table. Namun untuk penggunaan seed, tetap perlu mengingat  konsep dari seed itu sendiri.

Fathara Annisa Azka | C-aio Indonesia