Arsip Kategori: Ruby on Rails

Berisi catatan kuliah dan praktek

Georeferencing dengan Matlab – bagian 2

Untuk memastikan bahwa hasil Georeferencing kita sesuai dengan koordinat latitude dan longitude, kita bandingkan hasil optimasi dengan google map. Pertama-tama buat koneksi dengan database WebGIS, misalnya dengan nama ODBC ‘aphb’. Lihat cara-cara buat ODBC di postingan yang lalu.

Di baris 131 dan 132 diperoleh titik optimum yang berhasil dihitung dengan algoritma genetik. Selanjutnya di baris 133 dikonversi menjadi koordinat global latitude dan longitude yang akan dikirim ke database postgreSQL. Baris 135 membuat koneksi yang dilanjutkan dengan mempersiapkan lokasi field yang akan di-insert. Terakhir di baris 140 dilakukan proses inserting ke database.

Perhatikan hasil running optimasi di DesktopGIS dengan Algoritma Genetik, diperoleh beberapa titik optimum. Di sini kita baru mengkonversi satu titik optimum karena belum diketahui akurasinya. Jika sudah akurat, baru diterapkan di seluruh titik optimum.

Di sini diperlukan kejelian mata untuk mengarahkan lokasi google map dengan lokasi di DesktopGIS. Setelah itu diketahui akurasinya. Perhatikan gambar di bawah, tampak titik di google map sedikit meleset dari lokasi optimum hasil hitungan di desktopGIS dan ini harus diperbaiki dengan mengeset kembali fungsi konversi.

Jika diperhatikan, sepertinya base latitude dan longitude terlalu jauh sehingga harus digeser kekiri dan ke bawah agar tepat di lokasi yang ditunjukkan oleh panah merah di atas. Lihat video di bawah ini untuk lebih jelasnya:

Ok .. done.

‘Password crypt authentication not supported’ Problem di ODBC postgreSQL

Berhubung aplikasi WebGIS menggunakan Ruby on Rail dengan database PostgreSQL mau tidak mau Matlab menggunakan dua metode koneksi ke database tersebut:

  1. Dengan JDBC
  2. Dengan ODBC

Berhubung error ketika menggunakan JDBC dimana ada pesan kesalahan pada driver, akhirnya saya memutuskan untuk menggunakan ODBC. Buka ODBC di Administrative Tools yang sesuai (32 bit atau 64 bit), dilanjutkan dengan membuat database-nya.

Ketika selesai dibuat, check apakah sudah terbaca di Matlab dengan instruksi di command window:

getdatasources

Jika datasource ODBC Anda berhasil dibuat, akan muncul namanya di antara tanda petik pada variabel ans. Jika tidak, maka Anda harus mengulangi langkah pembuatan ODBC tersebut. Lakukan pembuatan koneksi.

Perhatikan pesan kesalahan (Message) : Password crypt authentication not supported. Pesan ini terjadi karena Windows tidak menerapkan encrypt password. Hal ini terjadi karena ketika membuat ODBC saya memilih PostgreSQL saja (default). Harusnya saya memilih PostgreSQL dengan unicode:

Disable SSL Mode kemudian lakukan ‘Test‘ dengan menekan tombol Test dilanjutkan dengan ‘Save‘. Buat koneksi conn lagi ke PostgreSQL (lihat help untuk koneksi database dengan Matlab). Pastikan tidak ada pesan kesalahan, serta jika Anda ketik isconnection(conn) di command window jawabannya satu bukan nol.

Cek dengan mengambil data:

Tampak isi tabel Projects saya di Ruby on Rail.

Membuat Aplikasi Sederhana User Profile dengan Ruby on Rails

Tak terasa hampir tiga bulan saya kuliah Web Application and Engineering, dan kini saatnya penghakimannya, final exam. Soalnya lumayan sederhana, tetapi pertanyaan membutuhkan wawasan yang luas terhadap dunia web.

Soal: Anda diminta membuat sebuah welcome page sederhana yang harus login terlebih dahulu untuk masuk ke page tersebut dengan autentikasi devise (lihat tulisan sebelumnya). Setelah login Anda dapat melihat profil Anda dan bisa melakukan editing pada profile tersebut. Ada beberapa pertanyaan yang menurut saya levelnya masuk kategori expert, seperti melakukan checking dengan java baik dari sisi client maupun server, hingga integration test dan pengembangan ke arah RESTful. Oke, kita jawab dulu pertanyaan yang mudahnya. Kira-kira tampilan sederhananya seperti ini:

Jawab: Pertama-tama siapkan folder beserta databasenya (saya menggunakan database postgresql saat ujian dengan sistem operasi UBUNTU, tetapi untuk lebih sederhana, kita gunakan saja bawaan dari RoR yaitu SQLite3).

rails new final

Masuk ke folder final, untuk membuat aplikasi welcome page. Kita akan membuat tiga scaffold yaitu user, utama, dan tabel. Utama adalah page sederhana bertuliskan “Welcome” yang berisi link untuk melakukan setting profile.

Buat model user dengan atribut nama dan alamat.

rails g scaffold user nama panggilan

Kode di atas menghasilkan model user dengan atribut nama dan alamat, dan operasi diberikan oleh Scaffold (New, Show, Update, dan Delete). Bisa juga ditulis rails g scaffold user nama:string panggilan:string. Tetapi secara default, RoR akan memberikan struktur data string. Di sini sengaja tidak ditambahkan alamat karena di soal, alamat (address) disisipkan lewat mekanisme migrasi database.

Migrasikan menjadi tabel:

rake db:migrate

Arahkan folder ke project. Jalankan server.

rails server

Buka http://localhost:3000/users dan masukan satu data baru.

Buka kembali program Devise yang telah kita buat sebelumnya. Kita akan mengarahkan user ke menu utama ketika selesai login. Buat kontroller dengan nama utama.

rails g controller utama index

Di sini index merupakan method yang akan mengarahkan ke profil user tersebut, nama, email, alamat dan lain sebagainya. Tambahkan pada \app\config\routes.rb.

resources :tabel

tabel di sini maksudnya page profil yang bersangkutan. Buat juga lengkap dengan controller dan view

rails g controller tabel index

lakukan Migrasi

rake db:migrate

Berikutnya buka file \app\views\utama\index.html.erb dan isi dengan kode berikut (pahami maksudnya):

<h1>Welcome</h1>

<%= link_to ‘Lihat Profile-ku’, tabel_index_path %>

Sisipkan satu field baru (alamat) ke tabel users.

rails g migration add_alamat_to_users alamat:string

Migrasikan ke database:

rake db:migrate

Berikutnya pada file \app\views\tabel\index.html.erb tambahkan juga kode berikut:

<h1>USER PROFILE</h1>

<p>

<strong>Nama:</strong>

<%= current_user.nama %>

</p>

<p>

<strong>Email:</strong>

<%= current_user.email %>

</p>

<p>

<strong>Panggilan:</strong>

<%= current_user.panggilan %>

</p>

<p>

<strong>Alamat:</strong>

<%= current_user.alamat %>

</p>

<td><%= link_to ‘Edit’, edit_user_path(current_user) %></td>

Arahkan routes ke utama#index

root :to => ‘utama#index’

Sedikit ada yang diutak-atik pada \app\views\users\_form.html.erb karena kita menambahkan satu field baru yaitu alamat. Tambahkan satu field terakhir sebelum <action>:

<div class=”field”>

<%= f.label :alamat %><br>

<%= f.text_field :alamat %>

</div>

Agar field alamat yang baru dapat diakses, pada users_controller.erb tambahkan ‘:alamat’:

def user_params

params.require(:user).permit(:nama, :panggilan, :alamat)

end

Terakhir, setelah edit profile link ke lihat profile pada \app\views\users\show.html.erb:

<%= link_to ‘Kembali ke Profile’, tabel_index_path %>

Berikutnya adalah membuat sistem autentikasi terhadap user dengan devise. Pertama-tama sisipkan pada Gemfile

gem ‘devise’

Lakukan instalasi

bundle install

Install devise yang baru ditambahkan pada Gemfile

rails generate devise:install

Setelah terinstall anda bebas membuat devise terhadap model Anda. Misalnya, user:

rails generate devise User

Perhatikan routes.rb dan user.rb jika Anda ingin menelusuri sistem devise bawaan Gem ‘devise’. Migrasikan:

rake db:migrate

Sedikit kelemahan dari devise adalah, kita tidak bisa sign out. Oleh karena itu, sisipkan kode di bawah ini pada body di \app\views\layout\application.html.erb. Note: sisipkan, jangan di replace semua !

<p class=”notice”><%= notice %></p>

<p class=”alert”><%= alert %></p>

<% if flash[:error] %>

<div id=”error”>

<%= flash[:error] %>

</div>

<% end %>

<div id=”container”>

<div id=”user_status”>

<% if user_signed_in? %>

Welcome <%= current_user.email %>! Not you?

<%= link_to “Sign out”, destroy_user_session_path, :method => :delete %>

<% else %>

<%= link_to “Sign up”, new_user_registration_path %> or

<%= link_to “Sign in”, new_user_session_path %>.

<% end %>

</div>

Terakhir, tambahkan pada app\controllers\utama_controller.erb di bagian atas (juga pada users_controller agar terjaga dari aksi hacking):

before_filter :authenticate_user!

Agar ketika user akan melihat profil dirinya, harus login terlebih dahulu. Arahkan route ke menu utama:

Menambahkan View tanpa Scaffold pada Ruby on Rails

Sejauh ini kita masih mengandalkan alat bantu scaffold pada rails yang langsung menyediakan 7 method (CRUD) tanpa kita bersusah payah. Tetapi untuk pembelajaran ada kalanya kita harus memahami konsep dasar antara Model – View dan Controller.

Terkadang kita tidak bisa membuat scaffold, misalnya user yang telah disetting dengan cara devise untuk login ke suatu situs. Jika kita buat rails g scaffold, akan terjadi bentrok. Oleh karena itu untuk melihat user-user yang aktif kita harus membuat view secara manual. Buka kembali project membuat autentikasi dengan devise.

Masuk ke folder project, buat satu controller baru dengan satu metode yaitu index, untuk melihat user-user yang terdaftar di sistem. Sebelumnya daftarkan beberapa user ke sistem anda. Bagi yang baru membaca tulisan ini ada baiknya mencoba tulisan saya sebelumnya tentang autentikasi dengan devise.

rails g controller list index

Tampak Anda telah berhasil membuat suatu view dengan index.html.erb yang siap dibuat kode programnya. Serta satu kontroler dengan nama list_controller.rb. Pertama-tama buka file list_controller.rb. Tambahkan secara sederhana pada metode index

@user = User.all

Dan pada \app\views\list\index.html.erb sisipkan kode ini:

<% @user %>

<% for user in @user %>

<%=user.id%> . <%= user.email %></br>

<% end %>

Coba akses ke http://localhost:3000/list. Anda harus menampilkan user-user yang terdaftar di situs yang baru saja Anda buat. Selamat mencoba.

Tambahan, jika ada error, tambahkan pada routes.rb dengan:

resources :list

Devise untuk Autentikasi pada Ruby on Rails

Buat project baru

rails new devis

Buat satu model berisi daftar kerjaan

rails g scaffold todo name description

migrasikan ke dalam database

rake db:migrate

Arahkan route ke todos#index, agar ketika dijalankan langsung ke alamat tersebut:

root :to => ‘todos#index’

Tambahkan pada Gemfile:

gem ‘devise’

Save file tersebut, lakukan bundle install seperti biasa ketika selesai melakukan editing Gemfile

bundle install

Install devise yang baru ditambahkan pada Gemfile

rails generate devise:install

Setelah terinstall anda bebas membuat devise terhadap model Anda. Misalnya, user:

rails generate devise User

Perhatikan routes.rb dan user.rb jika Anda ingin menelusuri sistem devise bawaan Gem ‘devise’. Migrasikan:

rake db:migrate

Sedikit kelemahan dari devise adalah, kita tidak bisa sign out. Oleh karena itu, sisipkan kode di bawah ini pada body di \app\views\layout\application.html.erb. Note: sisipkan, jangan di replace semua !

<p class=”notice”><%= notice %></p>

<p class=”alert”><%= alert %></p>

<% if flash[:error] %>

<div id=”error”>

<%= flash[:error] %>

</div>

<% end %>

<div id=”container”>

<div id=”user_status”>

<% if user_signed_in? %>

Welcome <%= current_user.email %>! Not you?

<%= link_to “Sign out”, destroy_user_session_path, :method => :delete %>

<% else %>

<%= link_to “Sign up”, new_user_registration_path %> or

<%= link_to “Sign in”, new_user_session_path %>.

<% end %>

</div>

Terakhir, tambahkan pada app\controllers\todos_controller.erb di bagian atas:

before_filter :authenticate_user!

Jalankan server dan anda akan diminta password untuk masuk ke page daftar kerjaan (todo):

rails s

Membuat Relasi Tiga Objek di Ruby on Rails

Postingan yang lalu kita telah berhasil membuat relasi sederhana antara dua tabel (one-to-many). Sekarang kita akan mencoba relasi antara tiga tabel. Buat project baru, misalnya parkir. Kita akan merelasikan tiga tabel yaitu user, mobil, dan todo. Todo adalah daftar pekerjaan yang dimiliki tiap user, begitu juga dengan mobil. Berikut diagram ERD-nya (dibuat dengan aplikasi www.draw.io)

rails new parkir

Buat model user dengan atribut nama dan alamat.

rails g scaffold user nama alamat

Kode di atas menghasilkan model user dengan atribut nama dan alamat, dan operasi diberikan oleh Scaffold (New, Show, Update, dan Delete). Bisa juga ditulis rails g scaffold user nama:string alamat:string. Tetapi secara default, RoR akan memberikan struktur data string.

rails g scaffold mobil user:belongs_to merek no_seri

Kode di atas akan menghasilkan model mobil dengan atribut merek dan no_seri dengan operasi langsung diberikan oleh scaffold. Migrasikan menjadi tabel:

rails g scaffold todo user:belongs_to name description

Kode di atas akan menghasilkan model mobil dengan atribut name dan description dengan operasi langsung diberikan oleh scaffold. Migrasikan menjadi tabel:

rake db:migrate

Buka file \models\user.rb. Tambahkan:

has_many :mobils

has_many :todos

Sedangkan pada file\models\mobil.rb, tambahkan:

belongs_to :user

Karena pada saat generate scaffold mobil kita sudah menambahkan user:belongs_to, maka tidak perlu menambah relasi di atas. Sekarang kita akan menghubungkan antara mobil dengan user, dimana pada tabel mobil memiliki foreign key user_id. User_id berada di tabel Users yang diberikan secara otomatis oleh RoR selain nama dan alamat.

Seperti biasa selalu migrasikan ke tabel dengan instruksi rake. Buka command prompt baru khusus untuk menjalankan server. Arahkan folder ke project.

rails server

Buka http://localhost:3000/users dan masukan satu data baru. Jalankan dan ketika menekan tombol show, kita akan menambahkan mobil milik user yang bersangkutan. Maka pada metode show, kita harus memanggil variabel mobil. Pada \controller\user_controller.rb tambahkan pada metode show (def show):

@mobil = Mobil.new(user_id: @user.id)

@todo = Todo.new(user_id: @user.id)

Artinya kita akan menambahkan mobil baru berdasarkan user_id dari pemilikinya yang saat ini sedang tampil. Jika tidak diisi, ketika akan menambahkan mobil pada users#show, akan muncul eror di form_for (cannot contain nil .. dst). Secara default, show pada daftar user tidak menyertakan data mobil, oleh karena itu sisipi kode pada \view\user\show.html.erb:

<% unless @user.mobils.empty? %>

<% end %><div id=”mobils”>

<% unless @user.mobils.empty? %>

<%= render @user.mobils %>

<% end %>

</div>

 

<h3>Add a Car:</h3>

 

<%= render partial: ‘mobils/form’ %>

Letakkan kode di atas sebelum link_to. Di sini render partial: bemaksud menyisipi form menambahkan mobil baru pada form menampilkan (show) user.

Buat satu file baru di \views\mobils\ dengan nama _mobil.html.erb. Isi dengan kode berikut:

<div class=”mobil” data-time=”<%= mobil.created_at.to_i %>”>

<strong><%= mobil.merek %></strong>

<em>on <%= mobil.created_at.strftime(‘%b %d, %Y at %I:%M %p’) %></em>

<%= simple_format mobil.no_seri %>

</div>

Buat satu file baru di \views\todos\ dengan nama _todo.html.erb. Isi dengan kode berikut:

<div class=”todo” data-time=”<%= todo.created_at.to_i %>”>

<strong><%= todo.name %></strong>

<em>on <%= todo.created_at.strftime(‘%b %d, %Y at %I:%M %p’) %></em>

<%= simple_format todo.description %>

</div>

File _mobil.html.erb merupakan file template untuk render @user.mobil. Jika tidak ada ini maka akan ada pesan “Missing Templat Users#show”. Jalankan Server, Anda harus menghasilkan aplikasi sederhana yang menambah user disertai dengan kendaraannya. Utak-atik views untuk menghasilkan tampilan yang bagus (lihat teknik membuat css dan sejenisnya untuk membuat user interface yang baik). Aplikasi ini sangat sederhana tetapi dapat berfungsi dengan baik.

Coba masukan satu user dengan satu mobil dan kerjaan. Pastikan berjalan dengan baik. Setelah itu klik show user yang bersangkutan untuk melihat daftar pekerjaan dan mobil yang dimilikinya.

Membuat Blog dengan Ruby on Rails + PDF Generation “PRAWN”

Introduction:

Lanjutan dari tulisan sebelumnya (membuat blog dengan rails), coba kita akan membuat tampilan pdf dari suatu postingan. Jika Anda belum membuat aplikasi blog, ada baiknya membuat terlebih dahulu dengan cara seperti tutorial sebelumnya (membuat blog). Perhatikan gambar berikut, tampak kop dan logo yang akan muncul setiap suatu postingan akan ditampilkan dalam format Printable Document File (pdf).

Sebaiknya Anda install terlebih dahulu Gem untuk Prawn.

gem install prawn

Insert pada Gemfile :

gem "prawn", "~> 0.12.0"

gem “prawnto”, “~> 0.1.1”

Jangan lupa menginstal gem:

bundle install

Tambahkan pada app\controllers\ articles_controller.erb kode berikut ini:

prawnto :prawn => { :top_margin => 75, :left_margin =>55, :right_margin =>100}

Buat satu file baru pada app\views\articles\ show.pdf.prawn. Insert file prawn itu dengan kode berikut ini (Letakkan file gambar di app\assets\images\logo.jpg):

pdf.image “#{Rails.root}/app/assets/images/logo.jpg”, :scale => 0.2, :position => 180

pdf.text “\n”    

pdf.text ” AT 70.12: Web Application Engineering” ,:style => :bold

pdf.text ” Asian Institute of Technology”

pdf.text ” Handout: #{@article.name}”

pdf.text ” ____________________________________________________________________”

pdf.text ” \n”

pdf.text ” #{@article.name}”, :size =>18, :style => :bold, :align => :center

pdf.text ”

#{@article.content},”,:columns => 2, :width => pdf.bounds.width,:style => :italic, :align => :justify

Actually you can type on http://localhost:3000/products.pdf to show show.pdf.prawn for each posting, you can add a link at show.html.erb with:

<%= link_to ‘Printable Version’, article_path(@article, :format => ‘pdf’) %>

  1. Run the server:

rails server

Open http://localhost:3000/products. You must see pdf document on your browser when clicking the “printable version” links.

Yukk .. Membuat Aplikasi Blog dengan Ruby on Rails

Introduction:

Aplikasi blog maksudnya kita akan membuat sistem yang menyediakan sarana bagi user untuk membuat suatu tulisan (content) dan user itu maupun yang lain dapat memberikan komentar (comment) terhadap tulisan tertentu. Jadi prinsipnya kita akan menyediakan dua model yaitu model content dan model comment. Model di sini merupakan objek yang akan diterjemahkan ke database yaitu tabel contents dan tabel comments. Sedikit ribet memang di rails, terutama konvensi ketika model single (content) ditranslasikan ke tabel menjadi plural/jamak (contents). Kita menggunakan relasi one-to-many dimana satu content memiliki lebih dari satu comment, sementara itu comment harus dimiliki (has_belongs) oleh suatu content.

Tutorial:

Arahkan ke direktori dimana aplikasi rails kita akan kita letakkan. Buat program baru, misalnya kita beri nama blog.

rails new blog

Artinya kita akan membuat suatu project dengan nama blog. Jika Anda menggunakan database postgresql tambahkan –d postgressql di sebelah kanan blog. Pindahkan folder pada command prompt Anda ke folder blog yang baru saja terbentuk (cd blog). Buat model content dengan atribut name dan content.

rails g scaffold article name content:text

Kode di atas menghasilkan model article dengan atribut name dan content, dan operasi diberikan oleh Scaffold (New, Show, Update, dan Delete). Bisa juga ditulis rails g scaffold article name:string content:text. Tetapi secara default, RoR akan memberikan struktur data string.

rails g scaffold comment article:belongs_to name content

Kode di atas akan menghasilkan model comment dengan atribut name dan content dengan operasi langsung diberikan oleh scaffold. Migrasikan menjadi tabel:

rake db:migrate

Buka file \models\article.rb. Tambahkan:

has_many :comments

Sedangkan pada file\models\comment.rb, tambahkan:

Belongs_to :content

Karena pada saat generate scaffold comment kita sudah menambahkan content:belongs_to, maka tidak perlu menambah relasi di atas. Migrasikan model anda ke database.

rails server

Buka http://localhost:3000/articles dan masukan satu data baru. Jalankan dan ketika menekan tombol show, kita akan menambahkan comment milik content yang bersangkutan. Maka pada metode show, kita harus memanggil variabel comment. Pada \controller\contents_controller.rb tambahkan pada metode show (def show):

@comment = Comment.new(article_id: @article.id)

Artinya kita akan menambahkan comment baru berdasarkan content_id dari pemilikinya yang saat ini sedang tampil. Jika tidak diisi, ketika akan menambahkan comment pada contents#show, akan muncul eror di form_for (cannot contain nil .. dst). Secara default, show pada daftar content tidak menyertakan data comment, oleh karena itu SISIPI (pada line 12) kode pada \view\articles\show.html.erb:

<% unless @article.comments.empty? %>

<h3><%= pluralize(@article.comments.size, ‘Comment’) %></h3>

<% end %>

 

<div id=”comments”>

<% unless @article.comments.empty? %>

<%= render @article.comments %>

<% end %>

</div>

 

<h3>Add a comment:</h3>

 

<%= render partial: ‘comments/form’ %>

Letakkan kode di atas sebelum link_to. Di sini render partial: bemaksud menyisipi form menambahkan comment baru pada form menampilkan (show) content.

Buat satu file baru di \views\comments\ dengan nama _comment.html.erb. Isi dengan kode berikut:

<div class=”comment” data-time=”<%= comment.created_at.to_i %>”>

<strong><%= comment.name %></strong>

<em>on <%= comment.created_at.strftime(‘%b %d, %Y at %I:%M %p’) %></em>

<%= simple_format comment.content %>

</div>

File _comment.html.erb merupakan file template untuk render @content.comment. Jika tidak ada ini maka akan ada pesan “Missing Templat Contents#show“. Anda harus menghasilkan aplikasi sederhana yang menambah content articles dengan komentarnya. Untuk membuat tampilan yang indah, Anda harus sedikit mengatur layout html dan css aplikas yang baru saja Anda buat.

Membuat Relasi Antar Kelas Sederhana dengan Ruby on Rails

 

Kita akan membuat dua kelas yaitu user dan mobil yang menghubungkan data user dengan mobil yang dimilikinya. Untuk yang baru pertama kali, sebaiknya lihat postingan sebelumnya, di mana menulis kode rails, cara instalasi, membuat program sederhana, dan lain-lain. Mudah-mudahan Anda juga berhasil membentuk apliksi sederhana seperti di bawah ini.

Ok, tiap user memiliki bisa lebih dari satu mobil, dan tiap mobil memiliki data pemiliknya.

rails new parkir

Artinya kita akan membuat suatu project dengan nama parkir. Jika Anda menggunakan database postgresql tambahkan –d postgressql di sebelah kanan parkir. Pindahkan folder pada command prompt Anda ke folder parkir yang baru saja terbentuk.

cd parkir

Buat model user dengan atribut nama dan alamat.

rails g scaffold user nama alamat

Kode di atas menghasilkan model user dengan atribut nama dan alamat, dan operasi diberikan oleh Scaffold (New, Show, Update, dan Delete). Bisa juga ditulis rails g scaffold user nama:string alamat:string. Tetapi secara default, RoR akan memberikan struktur data string.

rails g scaffold mobil user:belongs_to merek no_seri

Kode di atas akan menghasilkan model mobil dengan atribut merek dan no_seri dengan operasi langsung diberikan oleh scaffold. Migrasikan menjadi tabel:

rake db:migrate

Buka file \models\user.rb. Tambahkan:

has_many :mobils

Sedangkan pada file\models\mobil.rb, tambahkan:

belongs_to :user

Karena pada saat generate scaffold mobil kita sudah menambahkan user:belongs_to, maka tidak perlu menambah relasi di atas. Sekarang kita akan menghubungkan antara mobil dengan user, dimana pada tabel mobil memiliki foreign key user_id. User_id berada di tabel Users yang diberikan secara otomatis oleh RoR selain nama dan alamat.


Seperti biasa selalu migrasikan ke tabel dengan instruksi rake. Buka command prompt baru khusus untuk menjalankan server. Arahkan folder ke project.

rails server

Buka http://localhost:3000/users dan masukan satu data baru. Jalankan dan ketika menekan tombol show, kita akan menambahkan mobil milik user yang bersangkutan. Maka pada metode show, kita harus memanggil variabel mobil. Pada \controller\user_controller.rb tambahkan pada metode show (def show):

@mobil = Mobil.new(user_id: @user.id)

Artinya kita akan menambahkan mobil baru berdasarkan user_id dari pemilikinya yang saat ini sedang tampil. Jika tidak diisi, ketika akan menambahkan mobil pada users#show, akan muncul eror di form_for (cannot contain nil .. dst). Secara default, show pada daftar user tidak menyertakan data mobil, oleh karena itu sisipi kode pada \view\user\show.html.erb:

<% unless @user.mobils.empty? %>

<h3><%= pluralize(@user.mobils.size, Mobil) %></h3>

<% end %><div id=”mobils”>

<% unless @user.mobils.empty? %>

<%= render @user.mobils %>

<% end %>

</div>

 

<h3>Add a Car:</h3>

 

<%= render partial: ‘mobils/form’ %>

Letakkan kode di atas sebelum link_to. Di sini render partial: bemaksud menyisipi form menambahkan mobil baru pada form menampilkan (show) user.

Buat satu file baru di \views\mobils\ dengan nama _mobil.html.erb. Isi dengan kode berikut:

<div class=”mobil” data-time=”<%= mobil.created_at.to_i %>”>

<strong><%= mobil.merek %></strong>

<em>on <%= mobil.created_at.strftime(‘%b %d, %Y at %I:%M %p’) %></em>

<%= simple_format mobil.no_seri %>

</div>

File _mobil.html.erb merupakan file template untuk render @user.mobil. Jika tidak ada ini maka akan ada pesan “Missing Templat Users#show”. Jalankan Server, Anda harus menghasilkan aplikasi sederhana yang menambah user disertai dengan kendaraannya.

Coba masukan satu user dengan satu mobil. Pastikan berjalan dengan baik.

Setelah ditambahkan Mobil, ketika suatu user dilihat, akan tampak daftar mobil yang dimilikinya (has_many :mobils). Yang sedikit janggal adalah konsep jamak dan singuler pada RoR, yakni jamak mobil menjadi mobils.

Problem Error Controller Create di Rails 4 (ActiveModel::ForbiddenAttributesError)

Lagi asyik mengikuti tutorial pembuatan simple application di rails, tiba-tiba saat dirunning, ada masalah. Sudah saya teliti, tidak ada sintax yang error, hampir saja saya putus asa dan meninggalkan kerjaan saya. Untungnya saya iseng searching di google, dan ternyata ada yang bernasib sama dengan saya. Ternyata masalah muncul perbedaan kompatibilitas antara rails yang lama dengan yang terbaru. Berikut problema yang terjadi ketika melakukan proses penambahan record dengan controller method create. Jika script ini dijalankan:

def create

    @movie = Movie.new(params[:movie]) dst

Muncul error yang menunjuk pada baris kode tersebut. Ternyata solusinya berdasarkan yang saya searching adalah untuk rails 4 tidak bisa dengan menggunakan params seperti itu. Ganti dengan seperti ini:

@movie = Movie.new(movie_params)

Tetapi harus didefinisikan di bawah end method dengan baris seperti ini (bullets tidak ikut diketik):

  • private
    • def movie_params
    • params.require(:movie).permit(:title, :year)
    • end

Ketika dijalankan langsung, OK.

Rails on Windows .. Layak kah?

Ingin sekali saya mengembangkan Ruby on Rails (RoR) setelah saya selesai kuliah di sini karena karakternya yang cocok dengan materi yang sering saya ajar yaitu “Pemrograman Berorientasi Obyek”. Biasanya saya menggunakan Java sebagai bahasa untuk prakteknya, tetapi saya memiliki kesulitan ketika membuat koneksi antara kelas dengan sistem basis data yang berkarakter non obyek.

Berbeda dengan PHP yang sangat kompatibel dengan windows walaupun lebih cocok dengan linux, RoR sangat disarankan menggunakan linux. Tetapi untuk meningkatkan jumlah penggemar jenis bahasa baru ini mau tidak mau harus menggandeng windows mengingat jumlah pengguna windows yang masih menggurita di Indonesia. Berikut ini pengalaman saya menggunakan RoR yang berbasis windows.

Pertama-tama kita harus berkomunikasi dengan situs resmi RoR untuk memperoleh informasi dan software open source-nya. Untuk yang berplatform Windows kita dapat mengunduh dari: http://railsinstaller.org/en. Klik pada link download untuk Windows:

Jika Anda masih pemula, jangan khawatir dengan link-link di bawahnya karena dengan mengunduh Windows Ruby 1.9 Anda berarti mengunduh semua perlengkapan di bawahnya tersebut. Setelah di download, Anda tinggal mengekstrak dan menginstall dengan single click ala Microsoft, di mana untuk instalasi tinggal mengklik langsung jadi. Beda jika Anda menginstall lewat ubuntu misalnya. Anda harus menginstall apache dulu, menginstall postgresql atau mysql dulu, tetapi dengan download untuk windows, Anda tinggal menjalankan saja.

Saya sudah mencobanya, sedikit ada masalah ketika melakukan proses routing. Routing adalah proses yang mengarahkan suatu page ke arah tertentu. Misalnya Anda membuka situs http://rahmadya.com, maka Anda akan diarahkan ke mana oleh route aplikasi tersebut. Ternyata routing tidak berjalan, setelah saya selidiki ternyata Anda harus mengupgrade ke Rails versi terakhir (ketika saya buat tulisan ini masih berversi 4.0.0). Untuk apgrade, hubungi situs resmi rails yang menyediakan GEM. Gem adalah fasilitas rails seperti library di Windows. Situsnya: http://rubygems.org/gems/rails. Search saja di kolom searching, isi dengan kata kunci “rails”, maka Anda akan menjumpai rails versi terakhir. Ikuti cara downloadnya.

Ternyata ada rails terbaru versi 4.0.1. Untuk mengecek versi rails Anda, masuk ke command promt (Start – run – cmd), ketik saja ‘rails –v‘.

Ternyata versi rails saya masih 4.0.0. Anda tidak diharuskan mengupgrade, tetapi ada baiknya diupgrade untuk memperoleh hasil yang maksimal dari RoR. Untuk menginstallnya ada dua pilihan:

  1. Pada command windows ketik: ‘gem install rails’
  2. Pada Gemfile yang terletak di <folder_project>, tambahkan: ‘gem “rails”, “~> 4.0.1”

Tampak proses upgrade dari rails 4.0.0 ke rails 4.0.1. Berikutnya kita tinggal membuat aplikasi dengan rails, sangat mudah dan tidak membutuhkan banyak waktu.

Membuat Aplikasi Authentikasi dengan Ruby and Rails – 1

Berikut ini sedikit tip n trik untuk membuat aplikasi Ruby and Rails (RoR) yang berjalan di platform Linux Ubuntu 13. Masuk ke Terminal:

rails new simple-auth -d postgresql

Maksudnya adalah membuat project baru RoR dengan nama simple-auth dan database postgresql. Jika selesai, nanti di folder /home akan muncul folder simple-auth. Masuk ke folder tersebut dengan mengetik:

cd simple-auth

Di sana anda akan menjumpai folder Gemfile yang harus sedikit diedit untuk mengaktifkan bahasa ruby. Cara mengaktifkannya adalah dengan menghapus symbol “#”.

SImpan dan jangan lupa setiap melakukan perubahan pada file Gem, kita harus melakukan bundle install. Masuk ke terminal, jalankan:

bundle install

Sekarang kita harus melakukan perubahan pada postgresql, yakni pada file database.yml yang terletak di folder Config pada folder aplikasi kita (Simple-Auth). Ganti seluruh user dengan nama superuser postgresql, misalnya csim. Setelah itu jangan lupa menekan tombol simpan ‘save’. (Note: ada tiga yang harus dirubah).

Jangan lupa setiap melakukan perubahan pada configurasi database.yml, lakukan rake:

rake db:create:all

rake db:migrate

Berikutnya kita akan membuat controller dengan nama ‘new’. Rails termasuk framework Model View Controller (MVC). Buat dengan cara mengetik:

rails g controller users new

Akan terbentuk controller dengan nama new. Begitu juga untuk model user, buat:

rails g model user email:string password_hash:string password_salt:string

Lakukan migrate database

rake db:migrate

Cari file UsersController di folder /app/controller. Ekstensinya adalah ‘.rb’. Isi program seperti contoh berikut ini:

Berikutnya masukan kode berikut untuk views pada new.html

  • <h1>Sign Up</h1>
  • <%= form_for @user do |f| %>
  • <% if @user.errors.any? %>
  • <div class=”error_messages”>
  • <h2>Form is invalid</h2>
  • <ul>
  • <% for message in @user.errors.full_messages %>
  • <li><%= message %></li>
  • <% end %>
  • </ul>
  • </div>
  • <% end %>
  • <p>
  • <%= f.label :email %><br />
  • <%= f.text_field :email %>
  • </p>
  • <p>
  • <%= f.label :password %><br />
  • <%= f.password_field :password %>
  • </p>
  • <p>
  • <%= f.label :password_confirmation %><br />
  • <%= f.password_field :password_confirmation %>
  • </p>
  • <p class=”button”><%= f.submit %></p>
  • <% end %>

Untuk masalah enkripsi, kita tinggal memakai bundel yang ada pada file Gem, buka kembali Gemfile, masukan gem “bcrypt-ruby”, :require => “bcrypt”

Jangan lupa, lakukan lagi bundle install setiap kali melakukan perubahan pada Gemfile.

bundle install

Buka file user.rb pada folder /app/models/ dan isikan kode berikut ini:

  • before_save :encrypt_password
  • def self.authenticate(email, password)
  • user = find_by_email(email)
  • if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
  • user
  • else
  • nil
  • end
  • end
  • def encrypt_password
  • if password.present?
  • self.password_salt = BCrypt::Engine.generate_salt
  • self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
  • end
  • end

Tambahkan pula attribute berikut (dibawah before save):

  • attr_accessor :password
  • before_save :encrypt_password
  • validates_confirmation_of :password
  • validates_presence_of :password, :on => :create
  • validates_presence_of :email
  • validates_uniqueness_of :email

Hal yang berikut ini sangat penting, yaitu routing, di sini kita mengarahkan user ketika menekan tombol tertentu. Tambahkan code ini pada folder route.rb yang terletak di folder /app/models. Sisipkan di bawah get “users/new” tiga baris berikut ini:

Coba jalankan RoR dengan melakukan instruksi di bawah ini:

rails server

Biarkan console seolah-oleh hang, yang tandanya server sedang bekerja. Jika ingin mematikannya tinggal menekan Ctrl-C. Buka browser dan link pada http://localhost/3000

Coba klik Create user, lihat apa yang terjadi. Coba masuk ke database. Apakah sudah tersimpan? Misalnya saya masukan email: rahmadya@yahoo.com

Kuliah Web Application

Untuk jurusan Computer Science (Ilmu Komputer), tiap mahasiswa diwajibkan mengambil mata kuliah web application yang diasuh oleh Dr. Matthew M. Dailey. Doktor asal Amerika Serikat ini ahli di bidang pengembangan web.

Sempat ikut kuliah perdana, saya terpaksa harus kembali ke Indonesia karena tiap penerima beasiswa diwajibkan mengikuti serangkaian acara hingga penandatanganan kontrak dengan DIKTI. Dimulai dengan pengurusan Visa di kedutaan Thailand, dilanjutkan dengan Lokakarya pra keberangkatan yang dihadiri oleh hampir seratus orang. Setelah hampir 3 minggu menunggu SP Setneg, akhirnya dokumen selesai, ditandai dengan penandatangan kontrak di DIKTI, gedung D lt 4.

Setelah kembali ke AIT, saya dihadapkan dengan beberapa kesulitan akibat absen perkuliahan selama hampir sebulan. Beberapa dosen memberi keringanan, dari komposisi yang Mid : Final = 40 : 60 menjadi 20 : 80 hingga adanya kelas tambahan.

Berbekal tanya sana sini, akhirnya sedikit demi sedikit saya mampu mengikuti alur kuliah Web yang sangat ditakuti oleh sebagian besar mahasiswa CS di AIT. Terpaksa saya harus ikuti handout lab hingga yang saat ini dipelajari (Ajax). Cukup sulit, terutama karena laptop saya yang harus VMWare karena kapasitas C yang minim, sementara Laptop dari AIT belum tiba.

Diawali dengan install ubuntu 13, saya mulai mengeksplore bahasa yang baru saya kenal yaitu “Ruby on Rails (RoR)”. Bahasa ini lumayan ampuh dari security, terbukti telah digunakan di Yellow Page dan Twitter, dibanding PHP yang diterapkan di Facebook dan banyak di hack orang.

Masih ada waktu dua minggu untuk persiapan Mid Term. Semoga bisa mengikuti dan menjawab soal-soal yang diujikan, Amiiin.