Senin, 16 Maret 2015

Implementasi gem 'nested_form' di Rails 4

Dalam tutorial ini kita akan mencoba untuk membuat nested_form dari dua model yang saling berelasi dalam sebuah aplikasi rails dengan mengunakan gem 'nested_form'.

INSTALASI

Edit gemfile
gem 'nested_form'

Langkah selanjutnya adalah mengjalankan perintah
$ bundle install

Lalu kita masukan di application.js
//= require jquery_nested_form

PENGUNAAN

Jika kita mempunyai model Order yang mempunyai relasi has_many :line_items, untuk dapat menggunakan gem ini kita harus memasukan accepts_nested_attributes_for :line_items di model Order kita, dan jika menginginkan nested object agar dapat dihapus maka kita dapat menambahkan allow_destroy: true setelahnya.

Berikut adalah ilustrasinya :

order.rb
class Order < ActiveRecord::Base
 has_many :line_items, :dependent => :destroy
  accepts_nested_attributes_for :line_items, allow_destroy: true
end

line_item.rb
class LineItem < ActiveRecord::Base
  belongs_to :order
end

Selanjutnya adalah kita dapat mengunakan nested_form_for untuk dapat menggunakan nesting ini.

<%= nested_form_for @order do |f| %>

Maka dengan demikian kita dapat menggunakan link_to_add dan link_to_remove didalam builder tersebut yang berguna untuk menambahkan dan menghapus nested record, contoh.

<%= f.fields_for :line_items do |li| %>
  <%= li.text_field :item_name %>
  <%= li.text_field  :quantity  %>
  <%= li.text_field  :price  %>
  <%= li.link_to_remove "Remove item" %>
<% end %>
<%= f.link_to_add "Add item", :line_items %>

Satu hal yang tidak boleh kita lupakan untuk Rails 4 adalah penggunaan strong_params, dan kita harus memasukan attributes line_items ke bagian ini di orders_controller.rb agar nested record dari line_items dapat tersimpan di database.

def order_params
 params.require(:order).permit(:order_number, :order_date,        :line_items_attributes => [:id, :item_name, :price, :_destroy])
end

Selamat mencoba dan Happy Coding

Tidak ada komentar:

Posting Komentar