Menimbang dan melihat sudah tidak adanya lalu lintas data yang menuju ke page Groups dan 157, maka kedua halaman ini dengan berat hati harus kami take down untuk tujuan efisiensi. (bandithijo, 2019/10/11) ● Untuk semua artikel yang memberikan tautan ke repositori dotfiles saya di GitHub, saat ini sedang dalam proses perbaikan sehingga tidak dapat diakses. Mohon maaf atas ketidaknyamanan ini. (bandithijo, 2019/03/14) ●

Membuat Seed Data dari Hash pada Rails

Ditulis: 2020/01/02 Diperbaharui: 2020/01/02
Rails Tips

بسم الله الرحمن الرحيم

Prerequisite

Ruby 2.6.3 Rails 5.2.3 PostgreSQL 11.5

Prakata

Catatan kali ini akan singkat saja.

Saya akan mencatat cara yang saya temukan dari berbagai macam sumber, untuk membuat populasi data dari variable yang bertipe hash.

Maksud dari catatan ini adalah, untuk membuat data pada seed untuk web aplikasi Rails.

Gambaran Masalah

Misal, saya memiliki field location dan meeting_point yang merupakan entitas dari tabel experiences.

irb(main):001:0> Experience
=> Experience(id: integer, ..., ..., location: string, meeting_point: string, ... )

Kedua entitas ini merupakan entitas yang berkaitan. Seperti key dan value. Antara kota dengan tempat populer di kota tersebut.

Maka, saya bisa membuat populasi data untuk kedua entitas ini sebagai hash yang menampung nilai kota dan tempat populer.

  1. location, berisi key
  2. meeting_point, berisi value

Seperti di bawah ini.

# ruby hash

places = {
  'Kuala Lumpur': 'National Museum of Malaysia',
  'George Town': 'Penang Botanic Gardens',
  'Kuching': 'Kuching Waterfront Bazaar',
  'Melaka': 'Zoo Melaka',
  ...
  ...
  ...
}

Pemecahan Masalah

Pertama-tama generate dulu fake data untuk experiences.

Saya akan mengenerate sebanyak 100 data.

# db/seeds.rb

puts "Creating Fake Experiences"
100.times do
  Experience.create(
    ...
    ...
    ...
  )
end

Setelah jadi, saya akan mengupdate data2 pada experience untuk menambahkan data location dan meeting_point.

# db/seeds.rb

puts "Creating Fake Experiences"
...
  ...
  ...
...

puts "Creating Fake Experiences Location & Meeting Address"
places = {
  'Kuala Lumpur': 'National Museum of Malaysia',
  'George Town': 'Penang Botanic Gardens',
  'Kuching': 'Kuching Waterfront Bazaar',
  'Melaka': 'Zoo Melaka',
  'Kinabalu': 'Sabah State Museum',
  'Miri': 'Niah National Park',
  'Ipoh': 'Geology Museum',
  'Kuala Terengganu': 'Masjid Kristal',
  'Bharu': 'Istana Balai Besar',
  'Johor Bahru': 'Austin Heights Water & Adventure Park',
  'Sandakan': 'Puu Jih Syh Temple',
  'Sibu': 'Sibu Heritage Centre',
  'Kuantan': 'Sungai Pandan Waterfall',
  'Taiping': 'Taiping Zoo',
  'Alor Setar': 'Kedah Paddy Museum'
}
100.times do |exp_id|
  exp_id = exp_id + 1
  experience = Experience.find(exp_id)
  experience.update(
    location: places.keys.sample.to_s,
    meeting_point: places[places.keys.sample]
  )
end

Nah, tinggal jalankan $ rails db:seed dan field location dan meeting_point akan terisi oleh data dari variable hash places tersebut.

Seperti ini.

> SELECT id, location, meeting_point FROM experiences;
+------+------------------+---------------------------------------+
| id   | location         | meeting_point                         |
|------+------------------+---------------------------------------|
| 2    | Taiping          | Kuching Waterfront Bazaar             |
| 4    | Kinabalu         | Zoo Melaka                            |
| 5    | Kuantan          | Sabah State Museum                    |
| 6    | Sandakan         | National Museum of Malaysia           |
| 7    | Sandakan         | Masjid Kristal                        |
| 8    | Alor Setar       | Masjid Kristal                        |
| 9    | Bharu            | National Museum of Malaysia           |
| 10   | Kuala Terengganu | Austin Heights Water & Adventure Park |
| 11   | Kuala Terengganu | Zoo Melaka                            |
| 13   | Kuala Terengganu | Kedah Paddy Museum                    |
| ...  | ...              | ...                                   |
| ...  | ...              | ...                                   |
| ...  | ...              | ...                                   |
+------+------------------+---------------------------------------+

Selesai!

Sekian catatan kali ini.

Mudah-mudahan dapat bermanfaat.

Terima kasih.

(^_^)

Referensi

  1. docs.ruby-lang.org/en/2.0.0/Hash.html
    Diakses tanggal: 2020/01/02

  2. launchschool.com/books/ruby/read/hashes
    Diakses tanggal: 2020/01/02

Penulis

logo_author

BanditHijo adalah nama pena saya – meminjam istilah keren dari para penulis. Teman-teman menyebut saya sebagai GNU/Linux Enthusiast. Saya memang gemar mengutak-atik sistem operasi ini. Bukan karena hobi tapi karena saya perlu untuk menggunakannya. Hehe.

- Rizqi Nur Assyaufi