Rabu, 14 November 2018

Import CSV atau Excel pada Ruby on Rails


Pada umumnya website memiliki fungsi CRUD (Create, Read, Update, Delete). Create dan Read dapat dilakukan dengan menambahkan / mengupdate data melalui form pada aplikasi website yang dibuat. Bagaimana jika data yang akan diinput sangat banyak seperti 1000 data? Bagaimana jika data harus dimasukkan satu per satu, pusing bukan?

Sebagai solusi, di Ruby on Rails kita dapat memasukkan banyak data dalam satu langkah mudah dengan menambahkan fitur import pada aplikasi yang dibuat. Untuk menambahkan fitur ini, dibutuhkan gem bantuan yaitu gem ROO.

Sebelum ke langkah selanjutnya, sebagai catatan tutorial ini adalah lanjutan dari tutorial Membuat File Export dengan Format CSV & XLS

Bagaimana cara menggunakan gem ROO? Berikut langkah - langkanya :

1. Pada Gemfile, tambahkan baris berikut 
 gem 'roo', '1.13.2'

2. Pada console/terminal, ketikkan baris berikut 
 bundle install

3. Jika Gem ROO sudah terinstall, lalu tambahkan link untuk melakukan import data. Link import akan disimpan pada halaman index. Tambahkan kode berikut pada halaman index.
=< link_to 'Import Item', import_items_items_path

Ketika merefresh halaman index item, akan muncul error sebagai berikut.

   
Hal ini terjadi karena kita belum menambahkan link path tersebut pada route. Pada stores/app/config/routes.rb , tambahkan baris berikut.

4. Buka items_controller.rb, tambahkan method import_form serta import.

5. Biarkan kedua method tersebut, selanjutnya kita membuat tampilan untuk form import data. Pada app/views/items tambahkan file dengan nama import_items.html.slim, serta tambahkan kode berikut. 


6. Kembali ke items_controller.rb, pada method import tambahkan kode berikut.

Pada file config/application.rb, tambahkan baris kode berikut 
require 'roo'

7. Pada model item (app/models/item.rb), tambahkan kode berikut
Pada console akan terlihat proses data saat import data  
Kemudian lakukan testing. Kita akan mencoba untuk memasukkan data dari file .xlsx, seperti berikut


name
unit
price
Product 1
Renceng
1000
Product 2
Botol
2500
Product 3
Pak
10300
Product 4
Renceng
1000
Product 5
Botol
2500
Product 6
Pak
10300
 
Dalam console dapat terlihat proses import data seperti berikut 


Data berhasil diimport, halaman index item pada website akan muncul seperti ini


Kalian akan kembali ke halaman import data dengan message bahwa import gagal dilakukan, jika menekan tombol "import" tanpa memasukkan file data/gambar terlebih dahulu.