Selasa, 16 Maret 2021

Seri Belajar Ruby on Rails Bagian 11 - Membuat Aplikasi Manajemen Tugas (Homework Management)

Hai, semangattt! ini bagian terakhir dari Seri Belajar Ruby on Rails loh, kali ini kita akan belajar membuat aplikasinya langsung. Aplikasi nya yang simple-simple aja ya kalian pasti bisa kok, apalagi kalo kalian udah baca bagian yang lain. So kita yang langsung aja ya.

Kali ini kita akan membuat aplikasi yang namanya Homework Management dengan Rails versi 6 yaitu aplikasi yang bisa kalian gunakan untuk mengatur jadwal perkerjaan rumah guys. Berikut step-step cara pengerjaan nya :


Buat Project Baru


Buka terminal, dan jalankan code berikut:
$ rails new homework_management
$ bundle install
$ rake db:create
Setting devise untuk authentikasi (jika diperlukan)
Note: untuk setting device kalian bisa belajar disini [Link]
Contoh tampilan untuk devise


Membuat Table, Models, Views, dan Controllers

Contoh struktur table

Kita akan menggunakan 2 (dua) tabel untuk membuat aplikasi ini yaitu tabel Category dan Homework, kita akan menggunakan metode scaffold untuk mengenerate table, models, views serta controllers-nya. Berikut cara membuat schema nya :

$ rails g scaffold Category name:string
$ rails g scaffold Homework homework_name:text category:string deadline:date description:text category_id:integer
Setelah berhasil di generate jalankan migration :
$ rake db:migrate


Relasi dan Validasi

Di section ini kita akan membuat relasi dan validasi untuk tabel, relasi dan validasi ini biasa nya di simpan pada models, berikut contoh nya :





Custom Views


Karena kita telah membuat relasi otomatis kita perlu merubah tampilan CRUD yang telah tergenerate oleh scaffold tadi agar lebih optimal, seperti merubah field text menjadi select agar ada suggestion ketika membuat record yang telah terelasi.

Ubah pada bagian app/views/homeworks/_form.html.erb menjadi :


Setelah semua step sudah dikerjaan, buka terminal dan nyalakan rails server
$ rails s

Buka pada browser localhost:3000/categories untuk mengakses CRUD tabel Category dan  localhost:3000/homeworks untuk mengakses CRUD tabel Homework

Contoh tampilan Homeworks (localhost:3000/homeworks)
Contoh tampilan Categories (localhost:3000/categories)



Nah akhirnya selesai juga seri belajar kali ini, semoga bermanfaat bagi kamu yang telah mengikuti pelajaran ini dari bagian awal, sampai jumpa di seri-seri belajar yang akan datang, coming soon yaaa last but not least. Keep Shining Like Ruby :)

Download contoh aplikasi disini [Download]

Seri Belajar Ruby on Rails Bagian 10 - Menambahkan Css dan Javascript


Hai lanjut lagi, setelah sebelumnya belajar tentang mengimplementasikan authentikasi menggunakan Devise, kali ini kita akan belajar tentang penggunaan assets untuk css dan javascript di Ruby on Rails.

Assets


Di dalam Ruby on Rails ada yang dinamakan 'Asset Pipeline', ini berguna untuk menggabungkan/mengkompres assets seperti Javascript & CSS maupun File Gambar (.jpg, .png dll). Di dalam assets ini juga kita bisa mengkombinasikan dengan fitur yang ada pada gem dengan cara memanggilnya di dalam file css atau js.

  • Stylesheets untuk folder penyimpanan file css.
  • Javascripts untuk folder penyimpanan file js.
  • Images untuk folder penyimpanan file gambar (.jpg, .png dll)


Di dalam folder stylesheets biasanya ada file application.css yang digunakan untuk menginput/memanggil file css


Cara memanggil css dengan menambahkan *= require nama_file_css 

*= require_self digunakan bila file application.css akan digunakan untuk menuliskan code css juga.
*= require_tree . untuk memanggil semua file css yang ada di folder assets/stylesheets

    Note: adapun stub yaitu kebalikan dari require untuk excluding/membuang css ketika kita menggunakan require_tree dan suatu css tidak diperlukan, maka gunakan metode stub (Contoh: *= stub nama_file_css)


    Tidak jauh beda dengan css, penambahkan javascript biasanya diletakan di folder app/javascripts/packs dengan file induknya application.js

    Sama seperti css hanya saja pemanggilan file js menggunakan import, lihat gamabar di atas



    Layouts & View

    Nah setelah kita setup dibagian assets, untuk memanggil nya di view kita hanya menambahkan code berikut
    • Untuk css

      <%= stylesheet_link_tag    'application', media: 'all' %>
      


    • Untuk javascript

      <%= javascript_include_tag    'application', media: 'all' %>

    Sekian untuk pembelajaran kali ini mengenai penambahan Css dan Javascript di Ruby on Rails. Diharapkan tutorial ini menjadi salah satu pembelajaran yang mudah dimengerti bagi kita semua. Stay tune.


    Dicky Trifadillah | C-aio Indonesia

    Seri Belajar Ruby on Rails Bagian 7 - Memahami ActiveRecord

    Setelah sebelumnya telah memahami penggunaan migration, seed, dan cara membuat dummy data, serta perbadaan data dummy dan data master. Pada kali ini kita akan memahami mengenai Active Record.

    Active Record adalah library-library ORM yang digunakan pada model di Rails Framework. Model ini yang merupakan M dari konsep MVC pada Rails. Ia bertugas sebagai model yang bertanggungjawab atas data bisnis dan logika. Contoh dari data bisnis ini seperti data orang, data tempat, atau data barang.

    Active Record ini jika diimplementasikan merupakan sistem ORM (Object Relational Mapping) pada Rails.

    A. Definisi ORM

    ORM (Object Relational Mapping) adalah suatu metode/teknik pemrograman yang digunakan untuk mengkonversi data dari lingkungan bahasa pemrograman berorientasi objek (OOP) dengan lingkungan database relasional. 

    Secara singkat ORM dapat dikatakan sebagai jembatan yang berfungsi untuk menghubungkan antara OOP dan database relasional.

    B. Apa yang Dapat Dilakukan Active Record ?

    Active record memiliki kemampuan untuk
    • Merepresentasikan model dan data dari model tersebut.
    • Merepresentasikan hubungan antar model.
    • Menunjukkan hirarki pewarisan dari model yang berelasi.
    • Melakukan validasi data sdebelum data tersebut dimasukkan ke dalam database.
    • Menampilkan operasi database dalam bentuk OOP.

    C. Ketentuan Penamaan

    Secara default, Active Record memerlukan ketentuan penemaan untuk menentukan mapping dari model dan tabel. Contoh penamaan antara model dan tabel di Rails adalah sebagai berikut. Contoh ini berdasarkan aplikasi yang kita buat dari modul Bagian 5 - Membuat Aplikasi Rails Pertamamu, yaitu aplikasi manajemen tugas sederhana.

    Model/Class Table/Schema
    Category categories
    Homework homeworks

    Dari tabel dapt kita ketahui bahwa penamaan dari model dan tabel memiliki aturan  sebagai berikut.
    • Database Table - Ditulis secara plural, jika lebih dari dua kata dipisahkan dengan underscore.
      Contoh
      : homeworks, categories, homework_item
    • Model Class - Ditulis secara singular dengan setiap huruf pertama dari setiap kata menggunakan uppercase
      C
      ontoh: Homeworks, Category, HomeworkItem
    Untuk membuat model dan tabel dengan ketentuan penamaan yang benar secara cepat dapat menggunakan generator dengan cara
    $ rails generate model Homework

    D. Ketentuan Penamaan Schema

    Active Record juga menggunakan ketentuan penamaan untuk kolom pada tabel yang digunakan sesuai dengan kegunaan dari kolom tersebut. Ketentuan tersebut adalah sebagai berikut.
    • Foreign keys - Field ini harus diberi nama sesuai dengan nama tabel yag digunakan. Contohnya  item_id, order_id. Field ini akan otomatis dibuat oleh Active Record ketika menentukan hubungan atau relasi antar model.
    • Primary keys - Secara default, Active Record akan menggunakan sebuah kolom integer yang diberi nama id sebagai primary key. Ketika menggunakan Active Record, kolom ini otomatis akan terbuat.

    Untuk contoh pemakaian Active Record, kita akan melanjutkan mengerjakan aplikasi manajemen tugas sederhana. Jika sebelumnya kita membuat sistem CRUD menggunakan scaffold, kali ini kita akan membuat sistem CRUD untuk kategori tugas harian tanpa menggunakan scaffold.


    E. CRUD menggunakan Active Record tanpa Scaffold

    Pada tutorial sebelumnya telah ditunjukkan cara membuat tabel category yang hanya membutuhkan kolom category_namenya saja dengan menggunakan generator. Bagi yang belum tahu bagaimana caranya, lakukan perintah berikut pada terminal.
    $ rails generate migration CreateCategories
    1. Karena pada tutorial sebelumnya penggunaan generator hanya untuk membuat migration, maka untuk membuat modelnya akan dilakukan secara manual dengan cara berikut.
      • Buat file baru pada folder app/models dengan nama category.rb, lalu isi script berikut.Ini akan menunjukkan bahwa model Category akan merujuk kepada tabel categories.
    2. Setelah itu, buatlah controller dengan nama categories_controller.rb dan isi dengan script berikut.
    3. Lalu pada routes.rb tambahkan script berikut.Pada script di atas, kita mendaftarkan semua method dari categories_controller.rb menjadi sebuah resource.
    Create pada Active Record
    Selanjutnya untuk membuat sistem create atau tambah data yang akan kita lakukan adalah
    1. Buat folder pada app/views dengan nama categories dan buat file dengan nama new.html.erb dan _form.html.erb di dalam folder yang telah dibuat.

      Catatan:
      File _form.html.erb kita jadikan parsial. Pada Rails untuk penamaan file parsial harus diawali dengan tanda underscore.

    2. Coba jalankan server dengan menjalankan perintah
      $ rails s
      dan buka url http://localhost:3000/categories/new. Halaman tersebut masih berupa halaman kosong.
    3. Pada file categories_controller.rb tambahkan script berikut.
    4. Pada file _form.html.erb tambahkan script berikut.
    5. Tambahkan script pada file new.html.erb seperti berikut.
    Step-step di atas hanya menghasilkan halaman tambah kategori. Coba jalankan kembali url http://localhost:3000/categories/new. Jika step-step di atas dilakukan dengan benar, maka tampilan dari halaman tambah data kategori akan muncul seperti berikut.

    Setelah membuat proses untuk menampilkan halaman baru, yang akan kita lakukan selanjutnya adalah untuk membuat proses menyimpan data yang dimasukkan dari halam tersebut.
    1. Pada method create di categories_controller.rb tambahkan script berikut.
      Berikut ini merupakan penjelasan dari script tersebut:
      @category = Category.new(params.require(:category).permit(:name))
      
      Penjelasan:
      • Melakukan instansiasi terhadap model Category, dimana untuk melakukan instansiasi ini memerlukan parameter category.
      • Parameter ini terdapat pada form di new.html.erb. Dan data yang diperbolehkan adalah data name saja.
      respond_to do |format| 
        if @category.save
          format.html { redirect_to "/categories/new", notice: "Category was successfully created." }
        else
          format.html { redirect_to "/categories/new", notice: "Category wasm't successfully created." }
        end
      end
      
      Penjelasan:
      • respond_to do berguna untuk mengeksekusi perintah menyimpan data menggunakan web-service support. Tag ini berguna untuk menampilkan hasil respon dalam format html.
      • Jika data yang ditampung oleh variable @category berhasil disimpan, maka menampilkan text berupa nama kategori berhasil ditambahkan dan kembali ke halaman tambah data
      • JIka tidak berhasil disimpan, akan menampilkan text bahwa nama kategori tersebut tidak berhasil ditambahkan dan kembali ke halaman tambah data.
      Kita lakukan testing, kita coba masukkan data fisika pada text field, seperti berikut.

      Coba klik pada button create category. Jika data berhasil disimpan, maka pada tampilan akan muncul seperti berikut.

    Read pada Active Record
    Selanjutnya untuk membuat sistem menampilkan semua data kategori yang telah dimasukkan, yang akan kita lakukan adalah
    1. Buat file dengan nama index.html.erb di dalam folder app/views/categories.
    2. Coba jalankan server dengan menjalankan perintah
      $ rails s
      dan buka url http://localhost:3000/categories. Halaman tersebut masih berupa halaman kosong.
    3. Pada file index.html.erb tambahkan script berikut. 
    4. Lalu jalankan kembali url http://localhost:3000/categories di browser. Maka pada halaman tersebut tampilan yang akan muncul adalah sebagai berikut.

      Masih ingat pada modul sebelumnya, yaitu Bagian 6 - Membuat Table & Dummy Data kita melakukan penambahan data pada tabel kategori melalui seeding di Rails. Data tersebut terdiri dari Matematika, Sejarah, Bahasa Indonesia, Bahasa Inggris, Bahasa Jepang, Agama, Kimia, dan Biologi.

      Sedangkan Fisika adalah data yang ditambahkan melalui form.

    Yang kita lakukan barulah menampilkan semua data kategori, lalu bagaimana jika kita ingin menampilkan data kategori yang spesifik. Langkah yang dilakukan, yaitu:
    1. Buat file dengan nama show.html.erb di dalam folder app/views/categories. Tambahkan script berikut.
    2. Pada categories_controller.rb method show, tambahkan script berikut.
    3. Coba jalankan server dengan menjalankan perintah
      $ rails s
      dan buka url http://localhost:3000/categories dan klik link show pada salah satu data. Maka pada halaman tersebut tampilan yang akan muncul adalah sebagai berikut



    Update pada Active Record
    Selanjutnya untuk membuat sistem ubah data kategori yang akan kita lakukan adalah
    1. Buat file dengan nama edit.html.erb di dalam folder app/views/categories. Tambahkan script berikut.
    2. Pada categories_controller.rb method edit, tambahkan script berikut.
    3. Coba jalankan server dengan menjalankan perintah
      $ rails s
      dan buka url http://localhost:3000/categories dan klik link edit pada salah satu data. Maka pada halaman tersebut tampilan yang akan muncul adalah sebagai berikut

      Kita baru sampai pada step menampilkan tampilan ubah data. Selanjutnya kita tambahkan script untuk melakukan proses pengubahan data.

      Pada categories_controller.rb method update, tambahkan script berikut.
      Sekarang coba lakukan pengubahan data pada halaman ubah data. Jika melakukan step dengan benar, pasti data akan berhasil diubah.
    Selanjutnya, kita akan membuat proses untuk melakukan penghapusan data. Yang harus dilakukan adalah sebagai berikut.

    Delete pada Active Record
    Selanjutnya untuk membuat sistem ubah data kategori yang akan kita lakukan adalah
    1. Pada categories_controller.rb method destroy, tambahkan script berikut.
    2. Coba jalankan server dengan menjalankan perintah
      $ rails s
      dan buka url http://localhost:3000/categories dan klik link destroy pada salah satu data. Maka pada halaman tersebut tampilan yang akan muncul pop-up berupa konfirmasi penghapusan data sebagai berikut


      Jika kita menekan button OK, maka data akan terhapus dan kembali ke halaman sebelumnya.
    Fathara Annisa Azka | C-aio Indonesia

    Seri Belajar Ruby on Rails Bagian 8 - Membuat Validasi, Relasi dan Scope

    Pada artikel sebelumnya, kita telah mempelajari mengenai Active Record dan penggunaan Active Record pada  Rails. Sebagai contoh pada tutorial sebelumnya, kita membuat aplikasi homework management yang berfungsi untuk melakukan manajemen tugas harian sekolah ataupun tugas kuliah.

    Pada aplikasi tersebut terdapat dua buah model, yaitu category dan homework. Selain itu, pada aplikasi juga terdapat dua buah tabel, yaitu tabel categories dan tabel homeworks.

    Aplikasi ini sudah bisa melakukan CRUD. Akan tetapi, aplikasi yang dibuat masih sederhana. Misalnya saja, jika user melakukan pengisian data homework baru dan pada salah satu kolom tidak diisi, data tersebut masih bisa masuk ke dalam database. Untuk itulah dibutuhkan validasi. Terakhir kali, tampilan aplikasi yang sudah kita buat adalah sebagai berikut.



    A. VALIDASI

    Apa itu Validasi ?


    Validasi digunakan untuk memastikan hanya data yang valid yang dapat masuk ke database. Contohnya, mungkin saja penting untuk memastikan bahwa user melakukan pengisian nama kategori yang valid pada aplikasi yang dibuat.

    Pada rails, validasi dapat dilakukan dengan beberapa cara, yaitu:
    • Database constraint
      Database constraint disini maksudnya adalah pembatasan yang dilakukan pada sisi database. Contoh constraint adalah bahwa email pada tabel user haruslah bersifat unique Pada rails, validasi menggunakan database constraint dapat dilakukan di model.
    • Client-side validation
      Client-side validation adalah validasi yang dilakukan pada sisi klien. Contohnya adalah penggunaan javascript/jquery untuk memvalidasi bahwa pada kolom email harus mengandung "@" dan "."
    • Controller validation
      Controller validation, ini dilakukan pada controller, biasanya ini dilakukan sebelum pemrosesan data ke database.


    Kapan terjadinya validasi ?

    Validasi akan terjadi sebelum proses penyimpanan data ke database. Penyimpanan pada database, terbagi menjadi dua, yaitu:
    • Penyimpanan object baru 
    • Penyimpanan terhadap object yang sudah ada (update)

    Jika proses validasi menghasilkan error, maka Rails tidak akan melanjutkan proses penyimpanan data. Error ini akan menghasilkan message yang dapat ditampilkan pada view dengan menggunakan method errors.messages

    Validation Helper


    Active Record menyediakan banyak pre-defined validation helper yang dapat digunakan  langsung pada model. Setiap validasi menghasilkan false,error message yang dihasilkan akan dimasukkan ke dalam errors collection.
    • acceptance
      Method ini memvalidasi bahwa suatu checkbox dalam suatu form telah dicheck
      class Person < ApplicationRecord
      validates :terms_of_service, acceptance: true #user harus mencentang checkbox terms_of_service
      end
    • validates_associated
      Helper ini dapat digunakan ketika suatu model mempunyai hubungan dengan model lainnya. Jadi helper ini akan memvalidasi model itu sendiri dan model yang berkaitan.

      class Homework < ApplicationRecord
      has_many :categories
      validates_associated :categories
      end
    • confirmation
      Helper ini dapat digunakan ketika terdapat dua text field yang harus menerima isi yang sama. Contohnya, jika pada aplikasi dibutuhkan konfirmasi sebuah email atau password. 
      Validasi ini akan membuat virtual attribute dengan nama dari field yang harus dikonfirmasi dengan kata "_confirmation" pada akhir attribut tersebut.
      class Person < ApplicationRecord
      validates :email, confirmation: true
      end
    • length
      Digunakan untuk memvalidasi panjang dari suatu nilai pada attribut.
      class Category < ApplicationRecord
      validates :name, length: { minimum: 2 } #field name ini tidak boleh memiliki panjang kurang dari 2 karakter
      end
    • numericality
      Digunakan untuk melakukan validasi bahwa nilai pada suatu attribut hanya memiliki numeric values
    • presence
      Helper ini digunakan untuk melakukan validasi bahwa suatu attribut harus diisi.
      class Category < ApplicationRecord
      validates :name, presence: true #field name ini harus diisi
      end
    • absence
      Helper ini digunakan untuk melakukan validasi bahwa suatu attribut tidak boleh diisi.
    • uniqueness
      Digunakan untuk memvalidasi bahwa suatu nilai harus bersifat unique atau tidak boleh sama
      class Category < ApplicationRecord
      validates :name, uniqueness: true
      end
    • exclusion
    • format
    • validates_with
    • validates_each
    Validasi di Rails juga memiliki beberapa opsi/pilihan, yaitu 
    • :allow_nil
      Opsi ini mengizinkan suatu attribut bernilai nil
    • :allow_blank
      Opsi ini hampir sama dengan :allow nil, perbedaannya yaitu opsi ini memperbolehkan suatu attribut bernilai kosong. 
    • :message
      Digunakan untuk  melakukan custom message jika suatu validasi bernilai false
    • :on
      Opsi ini mengizinkan  kita untuk menentukan kapan validasi harus dilakukan. Secara default,  semua validasi dilakukan pada saat proses menyimpan, baik saat  proses create atau update.


    Conditional Validation


    Terkadang kita menginginkan suatu validasi hanya dijalankan pada saat kondisi-kondisi tertentu. Pada Rails, hal ini dapat dilakukan dengan menggunakan :if atau :unless

    Custom Validation 


    Rails memang menyediakan helper yang dapat digunakan untuk melakukan validasi. Namun ada kalanya, validasi yang diperlukan lebih complex. Untuk megatasi masalah tersebut dapat dilakukan dengan cara membuat validasi sendiri (custom).  Contohnya, jika pada suatu aplikasi, user harus memasukkan email yang valid.

    Scope validation
    digunakan untuk validasi terhadap coloum tertentu

    Implementasi Validasi pada Aplikasi


    Setelah mengetahui mengenai validasi pada Rails, kita coba implemetasikan pada aplikasi yang telah dibuat sebelumnya, yaitu aplikasi homework management.

    Pada aplikasi terdapat dua buah table, yaitu table homework dan category (berisi nama jadwal pelajaran). 

    Buka model category dan homework pada folder app/models.

    Pada model category, kita tambahkan validasi sebagai berikut. 

    Sedangkan pada model homework, tambahkan validasi sebagai berikut.

    Cara Menampilkan Pesan Error ketika Meggunakan Validasi 

    Di atas validasi telah dibuat, namun bagaimana caraya agar user mengetahui letak kesalahan dalam pegisian sebuah data ?. Caranya adalah tentu dengan menampilkan message error tersebut ke dalam tampilan user. Pada Rails, untuk menampilkan message error pada view (tampilan), dapat dilakukan dengan cara  berikut.

    Contohnya, kita akan menampilkan mesage error yang dihasilkan ketika melakukan penambahan data homework. Artinya, kita akan menampilkan message error ketika proses create data. Maka, yang harus dilakukan adalah buka file homework_controller pada folder app/controller.  Tambahkan script berikut.
    Pada bagian yg di dalamya terdapat form untuk menambahkan data baru, tambahkan script seperti  berikut.
    Kita coba jalankan aplikasi dengan menjalankan perintah rails s di terminal. Kita akan mencoba validasi yang telah dibuat, apakah berhasil atau tidak ?. Berikut contoh form tambah data homework.

    Form Menambahkan Data Homework
    Lalu coba tekan tombol create homework tanpa mengisi apapun.  Jika validasi berhasil dibuat, maka pada view akan muncul message seperti berikut.

    Message Error pada Halaman Tambah Data Homework

    B. Relasi

    Apa itu Relasi ?


    Pada aplikasi homework management yg telah dibuat telah dijelaskan di atas bahwa aplikasi ini memiliki dua buah tabel dan model, yaitu:

    • Tabel categories dan model category untuk menyimpan nama jadwal pelajaran
    • Tabel homeworks dan model homework untuk menyimpan data tugas

    Pada aplikasi tersebut, sistem CRUD pada data homework dan data category sudah dapat dilakukan. Berikut tampilan form untuk melakukan penambahan data homework dan data category.

    Form Menambahkan Data Homework
    Form Menambahkan Data Category

    Pada tampilan tambah data homework terdapat field category, dimana user harus mengisi sendiri nama category. Sedangkan kita sudah membuat tabel category beserta view dan sistem CRUD-nya. Lalu untuk apa ada tabel category jika kita bisa memasukkan sendiri nama categorynya ?. Untuk itulah dibutuhkan relasi agar saat memasukkan data homework, category yang dimasukkan berdasarkan data category yang sudah ada.

    Jadi kesimpulannya, relasi adalah hubungan antara dua atau lebih tabel yang sehingga memiliki keterkaitan.

    Jika kita pikirkan dari kedua tabel tersebut, maka terdapat kesimpulan jika:
    • Data homework hanya diwakili oleh satu category
    • Data category mewakili banyak data pada homework
    Lalu bagaimana cara membuat relasi ini pada Rails ?.


    Cara Mendifinisikan Relationship di Rails


    Untuk mendefinisikan relationship di Rails, kita dapat melakukannya di model. Relasi pada Rails, terdapat beberapa macam, yaitu:
    • belongs_to
      Ini seperti one-to-one. Contohnya terdapat tabel buku dan pengarang, dimana satu buku diwakili hanya oleh satu pengarang.
    • has_one
      Contohnya jika terdapat tabel supplier dimana satu supplier hanya memiliki satu account
    • has_many
      Contohnya jika terdapat tabel buku dan pengarang, dimana pengarang telah mengarang banyak buku, yang artinya pengarang bisa mewakili banyak buku yang berbeda.
    • has_many :through
    • has_one :through
    • has_and_belongs_to_many
    Pada aplikasi homework management sesuai dengan kesimpulan berikut
    • Data homework hanya diwakili oleh satu category
    • Data category mewakili banyak data pada homework
    Maka kita dapat menggunakan belongs_to pada model homework, dan has_many pada model category. Kita implementasikan pada model category seperti berikut.
    Sedangkan pada model homework, kita dapat mendefinisikan relationshipnya seperti berikut.

    Lalu kita ubah sistem input data homework pada bagian field category, sehingga category yang dimasukkan berdasarkan data category yang sudah ada. Pertama, kita ubah struktur migration homework untuk menambahkan kolom category_id dengan cara seperti berikut pada terminal.
    rails g migration AddCategoryIdToHomework
    Setelah itu buka file migrationnya pada folder db/migrate, dan tambahkan script berikut.

    Migrate migrasi dengan cara mengetikkan perintah berikut pada terminal
    rake db:migrate
    Lalu kita ubah tampilan form untuk menambahkan data atau update data homework. Sebelumnya pada field category berupa textbox, seperti berikut.
    Kita ubah pada bagian field category
    menjadi seperti berikut.
    Setelah itu, tambahkan script berikut pada homework_controller.
    Jangan lupa untuk memperhatikan param yg akan diproses untuk melakukan penambahan atau pengubahan data. Pada contoh kali ini, saya memasukkan param[:category] ketika belum  adanya relasi antara model homework dan category. Lalu tadi kita telah menambahkan kolom baru, yaitu category_id. Jadi, kita juga harus menambahkan param[:category_id]

    Apabila masih terdapat error validasi saat kita menambahkan data, jangan lupa kita ubah parameter category menjadi category_id pada method homework_params pada bagian private di controller.



    Bagaimana untuk Menampilkan Data yang Berelasi ?


    Untuk menampilkan data yang berelasi sesuai dengan yang sudah kita buat antara model category dan homework, bisa dilakukan dengan cara-cara berikut.

    C. Scope


    Rails menyediakan fungsi scope agar developer bisa menggunakan code secara DRY (Don't Repeat Yourself). Scope digunakan untuk memberikan nama dan condition suatu pemanggilan data. 

    Contohnya, jika pada aplikasi setiap menampilkan data category atau data homework, kita mengiginkan data tersebut untuk selalu tampil dari data terbaru.

    Penggunaan scope dapat dilakukan dengan berbagai cara
    • Default Scope
      Scope ini digunakan jika ketika melakukan pemanggilan data dalam suatu model harus selalu berdasarkan kondisi tertentu. Misalnya saja, jika data harus selalu ditampilkan menurut nama homework.
    • Menerima Argumen
      Scope juga bisa menerima argumen jika memang dibutuhkan, biasanya ini digunakan pada controller. Contohnhya saja, jika kita ingin mencari data homework yang dibuat berdasarkan waktu tertentu.
    • Menggunakan Kondisi
    • Merging Scope
    Pembahasan materi mengenai pembelajaran  validasi, relationship, serta scope di Ruby on Rails diharapkan dapat dimengerti dan  dapat  menjadi salah satu sumber pembelajaran Rails. 

    "Happy Coding!"

    Fathara Annisa Azka | C-aio Indonesia