Belajar Ruby On Rails Sample
Belajar Ruby On Rails Sample
Errata
Feedback
Translations
Jika ada yang berminat untuk meng-alih bahasakan buku ini ke bahasa selain Bahasa Indonesia,
silahkan kirimkan permintaan ke [email protected]
If you are interested to translate this book to a language other than Indonesian, please send a request
to [email protected]
Table of Contents
Acknowledgements....................................................................................................................................2
Errata..........................................................................................................................................................3
Feedback....................................................................................................................................................4
Translations................................................................................................................................................5
Table of Contents.......................................................................................................................................6
1. Pendahuluan.........................................................................................................................................10
1.1. Apa itu Ruby on Rails?.................................................................................................................10
1.1.1. Ruby......................................................................................................................................10
1.1.2. Rails......................................................................................................................................11
1.2. Sejarah Rails.................................................................................................................................11
1.3. Kenapa Menggunakan Ruby on Rails..........................................................................................12
1.4. Aplikasi/Website Apa Saja yang Menggunakan Rails..................................................................13
1.5. Instalasi Ruby on Rails.................................................................................................................14
1.5.1. Instalasi Ruby on Rails pada Ubuntu 14.04..........................................................................14
1.5.2. Instalasi Ruby on Rails pada Windows................................................................................15
1.5.3. Instalasi Ruby on Rails pada Mac........................................................................................20
2. Ruby.....................................................................................................................................................22
2.1. Kenapa Harus Belajar Ruby Terlebih Dahulu..............................................................................22
2.2. Fitur Ruby.....................................................................................................................................22
2.3. Ruby Editor..................................................................................................................................23
2.5. Interactive Ruby Shell..................................................................................................................24
2.6. Ruby Syntax.................................................................................................................................26
2.7. Reserved Words............................................................................................................................27
2.8. Memberikan Comment pada Ruby...............................................................................................28
2.9. Tipe Data......................................................................................................................................28
2.9.1. String....................................................................................................................................28
2.9.2. Numbers................................................................................................................................29
2.9.3. Symbol..................................................................................................................................30
2.9.4. Arrays....................................................................................................................................30
2.9.5. Hashes...................................................................................................................................31
2.10. Variables.....................................................................................................................................32
2.10.1. Global.................................................................................................................................32
2.10.2. Instance...............................................................................................................................33
2.10.3. Local...................................................................................................................................34
2.10.4. Class Variables....................................................................................................................35
2.10.5. Constants............................................................................................................................35
2.11. Operators....................................................................................................................................36
2.11.1. Operator Aritmatik..............................................................................................................36
2.11.2. Operator Perbandingan.......................................................................................................37
2.11.3. Operator Pemberian Nilai...................................................................................................37
2.11.4. Operator Pemberian Nilai Paralel.......................................................................................38
2.11.5. Operator Logika..................................................................................................................38
2.11.6. Operator Tenary..................................................................................................................38
5.4. Route............................................................................................................................................80
5.5. Controller.................................................................................................................................80
5.6. Action Index dan View.................................................................................................................80
5.7. Action Form Insert dan View.......................................................................................................82
5.8. Partial View Form.........................................................................................................................83
5.9. Action Insert Data.........................................................................................................................84
5.10. Action Form Update dan View...................................................................................................85
5.11. Action Hapus..............................................................................................................................86
6. Membuat Blog......................................................................................................................................88
6.1. Gems.............................................................................................................................................88
6.2. Menjalankan Web Server..............................................................................................................90
6.3. Mengatur Database.......................................................................................................................91
6.4. Membuat Article Scaffold............................................................................................................92
6.5. Menjalankan Migrate...................................................................................................................92
6.6. Mengganti URL............................................................................................................................92
6.7. Memasukkan TwitterBootstrap....................................................................................................92
6.8. Mengganti Layout Default...........................................................................................................94
6.9. Menyesuaikan Tampilan dengan TwitterBootstrap......................................................................96
6.9.1. Index.....................................................................................................................................96
6.9.2. Form......................................................................................................................................97
6.10. Autentikasi Pengguna Menggunakan Devise.............................................................................98
6.11. Membatasi Akses Pengunjung ke Halaman Admin..................................................................102
6.12. Membuat Halaman Admin untuk Users...................................................................................103
6.13. Relasi Antar Tabel....................................................................................................................105
6.14. Keluar dari Halaman Autentikasi.............................................................................................108
6.15. Membuat Halaman Landing.....................................................................................................108
6.16. Membuat Partial View untuk Memudahkan Mengelola Kode.................................................109
6.17. Pagination.................................................................................................................................113
7. Snippets..............................................................................................................................................115
7.1. Commandline.............................................................................................................................115
7.1.1. Membuat Project Baru........................................................................................................115
7.1.2. Menjalankan Server............................................................................................................116
7.1.3. Generate dan Destroy..........................................................................................................116
7.1.3.1. Generate Scaffold........................................................................................................116
7.1.3.2. Destroy Scaffold..........................................................................................................117
7.1.3.3. Generate Controller.....................................................................................................118
7.1.3.4. Destroy Controller.......................................................................................................119
7.1.3.5. Generate Model...........................................................................................................119
7.1.3.6. Rollback dan Destroy Model......................................................................................120
7.2. Menambahkan Custom Action pada RESTful...........................................................................121
7.3. Form...........................................................................................................................................122
7.4. Form Ajax...................................................................................................................................124
7.5. Validasi Menggunakan ActiveRecord........................................................................................125
7.5.1. presence..............................................................................................................................125
7.5.2. validates_associated............................................................................................................126
7.5.3. length..................................................................................................................................126
7.5.4. uniqueness...........................................................................................................................127
7.6. Upload File.................................................................................................................................127
7.7. Mengirim Email Menggunakan Action Mailer..........................................................................130
7.8. Basic Authentication dengan Bcrypt..........................................................................................132
7.9. Mengganti URL Default pada Devise........................................................................................135
7.11. Basic Pagination.......................................................................................................................136
7.12. Membuat aplikasi satu halaman...............................................................................................140
7.13. Pengenalan singkat Sass...........................................................................................................140
7.13.1. Variables...........................................................................................................................140
7.13.2. Nesting..............................................................................................................................141
7.13.3. Partials..............................................................................................................................142
7.13.4. Import...............................................................................................................................142
7.13.5. Mixins...............................................................................................................................143
7.13.6. Extend...............................................................................................................................143
7.13.7. Operators...........................................................................................................................144
7.14. Pengenalan singkat CoffeeScript..............................................................................................145
7.14.1. Functions..........................................................................................................................145
7.14.2. Objects dan Arrays............................................................................................................146
7.14.3. Conditional.......................................................................................................................146
7.14.4. Array Slicing dan Splicing Menggunakan Range.............................................................146
7.15. Bekerja dengan Tabel Virtual pada Database...........................................................................147
7.16. Melewatkan Token melalui Ajax dengan Cara Manual...........................................................150
7.17. Menjalankan Aplikasi Ruby, Bash/Shell Script, Java, PHP dan Lain-Lain.............................151
8. Server Produksi..................................................................................................................................153
9. Troubleshooting.................................................................................................................................156
9.1. WEBrick Web Server Tidak Berjalan.........................................................................................156
9.2. MySQL Gagal di Bundle pada Ubuntu......................................................................................157
9.3. Error Ketika Penambahan Gem..................................................................................................157
9.4. Error 'Bundle Exec'.....................................................................................................................158
1. Pendahuluan
1.1.1. Ruby
Ruby adalah sebuah bahasa pemrograman yang dibuat oleh Yukihiro Matz Matsumoto.
Ruby adalah bahasa program yang singkat, syntax yang rapi, syntax yang tidak memerlukan banyak
tanda baca yang berlebihan.
Yang sangat menarik dan kenapa kita juga menggunakan Ruby adalah pernyataan Matzs sebagai
berikut;
Saya berbicara dengan teman tentang kemungkinan bahasa script menggunakan objectoriented. Saya menguasai Perl, tetapi saya tidak menyukainya karena terlihat seperti bahasa
mainan. Object-oriented sepertinya sangat menjanjikan. Saya juga menguasai Python, tetapi
saya juga tidak menyukainya karena saya fikir Python bukanlah bahasa object-oriented yang
murni. Object-oriented pada Python terasa seperti fitur tambahan. Sebagai orang yang sangat
suka programming dan object-oriented dalam 15 tahun ini, saya sangat ingin bahasa script
object-oriented yang murni, mudah digunakan. Saya sudah mencari-carinya, saya tidak
menemukannya sehingga saya membuatnya sendiri.1
Alasan tersebut juga merupakan salah satu alasan yang cukup kuat kenapa kita menggunakan Ruby
sebagai bahasa pemrograman.
1.1.2. Rails
Rails dikembangkan oleh David Heinemeier Hansson. Ruby on Rails adalah sebuah framework aplikasi
berbasis web yang ditulis dengan bahasa Ruby. Ruby on Rails secara singkat disebut dengan Rails
yang merupakan sebuah perpanjangan library dari bahasa Ruby.
Secara umum Ruby on Rails merupakan kumpulan kode-kode yang ditambahkan pada program Ruby.
Secara teknis, kode-kode tersebut disebut sebagai paket yang lebih spesifik disebut RubyGems 2 yang
ditambahkan melalui sebuah perintah pada shell.
Ruby on Rails juga dikenal dengan full stack framework yang menekankan pola pengembangan
software, pengaturan konfigurasi yang sederhana (Convention over configuration/COC), jangan ulangi
kode (Don't Repeat Your Self/DRY), Active Record dan model-view-controller (MVC).
RubyGems adalah sebuah paket manager untuk bahasa program Ruby untuk didistribusikan pada program Ruby
dan Ruby library (secara satuan hanya disebut sebagai gem). RubyGems juga merupakan sebuah tools yang digunakan
untuk mengelola dan mendistribusikan gems.
lebih baik dengan rilis awal Rails 3. Pada Rails 3 inilah pertama kali diperkenalkan istilay DRY agar
developer tidak menulis code yang berulang dan ini menjadikan Rails 3 sangat efektif dalam
pengembangan software. Merb dan Rails selanjutnya bergabung sebagai bagian dari Rails 3.0.
Rails 3.1 dirilis pada 31 Agustus 2011, menampilkan Migrasi database Reversible, Asset Pipeline,
Streaming, jQuery sebagai library JavaScript default dan juga memperkenalkan CoffeeScript dan Sass
ke dalam framework stack.
Rails 3.2 dirilis pada tanggal 20 Januari 2012 yang memungkinkan developer mendevelop aplikasi
dengan cepat dengan engine routing yang juga dikenal sebagai Journey engine, Automatic Query
Explain dan Tagged Logging. Rails 3.2.x adalah versi terakhir yang mendukung Ruby 1.8.7 dan Rails
3.2.12 mendukung Ruby 2.0.
Rails 4.0 dirilis pada 25 Juni 2013 dengan memperkenalkan Rusian Doll Caching, Turbolinks, Live
Streaming serta Active Resource, Active Record Observer dan komponen lainnya yang dapat
dimasukkan kedalam Gems.
Rails 4.1 dirilis pada tanggal 8 April 2014 dengan memperkenalkan Spring, Variants, Enum, Mailer
preview, dan secrets.yml.
Rails 4.2 dirilis pada tanggal 19 Desember 2014 dengan memperkenalkan Active Job, asynchronous
emails, Adequate Record, Web Console dan foreign keys.
bekerja dalam sebuah tim maupun pergantian anggota tim untuk project yang sama.
Kode yang singkat dan terstruktur dengan baik untuk dan aplikasi yang reliable.
Ruby adalah bahasa object-oriented yang dinamis. Dengan perpaduan framework Rails, ini
dapat komunikasi aplikasi dengan database, membuat sitem template, menangani layout,
menangani ajax dan implementasi plugin yang sangat banyak dan mudah. Dengan kata lain,
Rails mengeliminasi bagian yang membosankan pada software development.
Ruby on Rails berkembang sangat pesat dan ini sangat memudahkan mengakomodasi
perubahan kearah yang lebih sempurna.
Kode yang ditulis dalam bahasa Ruby sangat mudah dibaca dan dapat didokumentasikan
dengan mudah. Konvensi atau aturan penulisan code sangat jelas sehingga hal ini meningkatkan
produktivitas walaupun terjadi perubahan struktur developer.
Ruby on Rails mempunyai lingkungan test dan framework pengujian tersendiri.
Library pada Ruby on Rails sebagian besar adalah open source sehingga biaya lisensi dapat
ditekan.
Selain itu, hal yang mempengaruhi kecepatan dalam pengembangan dengan Ruby on Rails
adalah komunitas yang besar dan library yang terus bertambah setiap harinya.
Github
Bloomberg
SlideShare
SoundCloud
AirBNB
Heroku
Shopify
IndieGogo
Zendesk
Selain website diatas, menurut wapplizer.com, terdapat 35.758 website yang dipastikan menggunakan
Ruby on Rails dan sebanyak 8.061.564 terindikasi menggunakan Ruby on Rails.
2. Ruby
9. Ruby dapat digunakan untuk aplikasi berskala besar atau kecil. Aplikasi berskala besar yang
dibuat dengan Ruby dapat dikelola dengan mudah karena kode sudah terorganisir menjadi class
dan object.
10. Ruby dapat digunakan untuk mengerjakan aplikasi internet atau intranet,
11. Ruby dapat diinstal pada POSIX dan Windows,
12. Ruby mendukung GUI tools; Tcl/Tk, GTK, dan OpenGL,
13. Ruby dapat dengan mudah dikoneksikan dengan DB2, MySQL, Oracle, Sybase dan SQLite,
14. Ruby mempunyai banyak fungsi built-in yang dapat langsung digunakan pada script Ruby.
NetBeans
Sublime Text
Pada Windows:
1. Notepad++
2. E-TextEditor
3. Ruby In Steel
4. Netbeans
Pada Mac OS X:
1. TextMate
2. TextWrangler
Untuk penulisan lebih lanjut, saya akan lebih banyak menulis kata terminal untuk merujuk command
prompt pada Windows. Sehingga jika saya menulis terminal, bagi yang menggunakan sistem operasi
Windows silahkan menjalankan Command Prompt with Ruby on Rails.
Untuk melihat versi irb yang digunakan, ketik perintah berikut pada terminal;
nitza@ubuntu-RV:~$ irb -v
irb 0.9.6(09/06/30)
Untuk keluar dari irb shell, kita bisa mengetikkan perintah exit seperti diatas.
Command yang diketik tersebut adalah untuk mengetahui lokasi interpreter pada sistem operasi yang
kita pakai. Dan sekarang kita tau lokasi interpreter Ruby untuk sistem operasi Unix yaitu pada
/home/nitza/.rbenv/versions/2.1.4/bin/ruby
dan
untuk
sistem
operasi
Windows
adalah
C:/RailsInstaller/Ruby2.1.0/bin/ruby.exe.
Lokasi tersebut berguna bagi aplikasi yang akan kita buat untuk diterjemahkan oleh interpreter yang
tepat.
Sekarang kita akan melanjutkan membuat sebuah script sederhana yang diberi nama 01_app.rb.
Berikut adalah script yang ada didalamnya;
#!/home/nitza/.rbenv/versions/2.1.4/bin/ruby
puts "Hello world"
Untuk sistem operasi Windows tidak diharuskan menyertakan interpreter path pada baris pertama,
tetapi jika disertakan aplikasi tidak akan menjalankannya. Jadi, untuk sistem operasi Windows
END
alias
and
begin
break
case
class
def
defined?
Do
else
elsif
end
ensure
false
for
if
in
next
nill
not
or
redo
rescue
retry
return
self
then
true
3 Pada sistem operasi Windows, letakkanlah file 01_app.rb didalam folder C:\Sites sehingga memudahkan untuk
menjalankan perintah ruby tanpa diikuti dengan file path
3. Rails
Bab berikut lebih banyak berisi tentang dokumentasi Rails dan cara menggunakannya.
Dalam mempelajari aplikasi, developer mempunyai cara yang berbeda-beda. Ada yang lebih senang
membuat aplikasi sederhana terlebih dahulu baru membaca dokumentasi untuk memberikan penjelasan
lebih dari apa yang telah dibuat.
Buku ini juga telah melalui riset dengan diuji coba pada beberapa orang developer. Hasilnya sebagian
besar developer menyatakan kurang nyambung ketika membaca dokumentasi sehingga dia membuat
aplikasi sederhana pada Bab 4 dan 5 terlebih dahulu dan kembali lagi pada Bab ini untuk mempelajari
lebih jauh.
Jika Anda adalah developer yang suka cara membuat aplikasi sederhana terlebih dahulu, silahkan
lewati Bab ini, teruskan pada Bab 4, Bab 5 dan kembali lagi untuk membaca Bab ini.
Dengan Rails, semua diatur pada library yang dapat dipanggil dan digunakan secara langsung
sehingga proses development menjadi sangat cepat, terstruktur dan dapat di skalasi. Dengan hanya
menggunakan Rails, script penunjang untuk aplikasi web seperti HTML, CSS dan Javascript telah
digabungkan menjadi satu. Disinilah peran full stack framework untuk mempercepat proses
pengembangan aplikasi.
3. Ringan dan cepat
Pada aplikasi Rails, sebelum HTTP response diberikan kepada pengunjung web, terlebih dahulu
resource tersebut dicompile.
4. Keamanan
Rails mempunyai built-in security dan solusi yang elegan untuk mengamankan password dan data.
5. Scalability
Dalam enterprise, scalability sangat penting seiring dengan pertumbuhan bisnis. Ada beberapa
pilihan scalability pada Rails yaitu horizontal dan vertikal. Skala horizontal seperti penambahan
perangkat server, sementara skala vertikal yaitu dengan penambahan memori, disk atau
penggabungan kedua-duanya. Sementara pada sisi software, scalability dapat dilakukan dengan
cukup mudah karena peran bahasa berorientasi objek, code yang mudah dibaca, terstruktur dan
rapi karena telah diatur sedemikian rupa melalui convention.
Baris setelah perintah tersebut memberikan kita clue apa yang dilakukan Rails.
Bagian yang diberi high light adalah tempat dimana kita bisa menyertakan dependency library pada
Rails yaitu Gemfile dimana didalamnya terdapat library yang kita butuhkan untuk pengembangan
aplikasi berbasis web seperti; HTML, CSS, JavaScript dan library lainnya. Dengan hanya satu baris
perintah bundle install, kita langsung dapat fokus pada pengembangan aplikasi.
Beberapa developer partner kerja saya sering mengeluh karena menjalankan/membuat aplikasi melalui
commandline. Tetapi ketika mereka mengenal commandline lebih jauh, commandline sangat membantu
produktivitas mereka dan mereka mulai suka dengan commandline.
Membuat aplikasi menggunakan Rails akan terasa lebih mudah menggukan bantuan commandline.
Hampir semua commandline digunakan untuk generate aplikasi, mencari dependecy aplikasi,
menempatkan library dan perintah otomatisasi lainnya hanya dengan satu baris perintah.
Aplikasi ini dapat dibuat dalam satu menit dengan mengikuti poin-poin penting terutama pada bagian
commandline yang telah dituliskan pada pembahasan tanpa memperhatikan keterangan-keterangan
tambahan yang ada.
Setelah beberapa kali membuat aplikasi, saya memastikan Anda juga tertarik dan langsung ingat
commandline yang digunakan sehingga ini mempercepat dan memudahkan proses developemnt.
Silahkan ikuti langkah-langkah berikut untuk membuat aplikasi hanya dalam waktu 1 menit.
5.2. Model
Untuk membuat model, ketik perintah berikut;
$ rails g model Car name:string brand:string description:text
lupa
menambahkan
harga,
untuk
menambahkannya
bukalah
file
7. Snippets
Untuk meningkatkan produktivitas kerja, kita akan membahas snippets yang penting pada proses
development Rails.
7.1. Commandline
Beberapa commandline yang penting dalam development aplikasi Rails adalah sebagai berikut;
rails generate
rails dbconsole
rails server
rails console
rake
Commandline tersebut secara detail akan dibahas pada sub bab berikut;
HTTP Verb
articles_path
Path
Controller#Action
GET
/articles(.:format)
articles#index
POST
/articles(.:format)
articles#create
new_article_path
GET
/articles/new(.:format)
articles#new
edit_article_path
GET
articles#edit
articles/:id/edit(.:form
at)
article_path
Dan
dalam
GET
/articles/:id(.:format)
articles#show
PATCH
/articles/:id(.:format)
articles#update
PUT
/articles/:id(.:format)
articles#update
DELETE
/articles/:id(.:format)
articles#destroy
contoh
ini,
kita
ingin
menambahkan
path
/articles/by_user
dan
/articles/by_category/category_id.
Untuk menambahkan path ini, bukalah file config/routes.rb dan tambahkan baris yang diberi high
light;
Rails.application.routes.draw do
resources :articles do
collection do
get 'by_user', to: 'articles#by_user'
get 'by_category/:id', to: 'articles#by_category'
end
end
end
Dengan menambahkan beberap route tersebut, maka langkah selanjutnya adalah membuat action
by_user dan by_category pada app/views/articles_controller.rb dan juga menambahkan view
yang berhubungan dengan action tersebut pada folder app/views.
9. Troubleshooting
Proses problem solving untuk term sistem informasi mengacu kepada istilah troubleshooting. Dalam
troubleshooting tentunya terlebih dahulu ada trouble atau error pada sistem atau aplikasi baik itu pada
proses development atau pada proses production.
Error atau trouble pada proses development atau produksi adalah hal yang wajar. Error tersebut dapat
dilihat melalui commandline langsung atau dapat dilihat melalui file log.
Troubleshooting pun pada setiap mesin dan lingkungan sistem operasi berbeda-beda. Maka dari itu
troubleshooting secara umum yang ditemui pada proses development dan production Rails akan
dibahas pada Bab ini.
Kasus tersebut terjadi karena library untuk MySQL client belum terinstall.
Untuk dapat menginstall MySQL client, ikuti langkah berikut;
$ sudo apt-get -f install
$ sudo apt-get update
$ sudo apt-get install libmysqlclient-dev
4. Jika masih terjadi error, ulangi langkah diatas tetapi dengan mengganti perintah pada poin dua yaitu
bundle update