Dalam artikel ini kita akan membahas tentang permasalahan yang timbul ketika kita mempunyai gem 'permanent_records' dan gem 'nested_form' di aplikasi Rails kita.
STUDI KASUS
Misal dalam aplikasi yang kita buat terdapat model Order dan LineItem.
order.rb
line_item.rb
Di orders_controller.rb untuk Rails 4 jangan lupa dibagian strong_params untuk menyertakan attributes dari line_items
orders_controller.rb
Yang harus diingat untuk nested_form di rails 4 adalah memasukan attributes "_destroy" di attributes child, jika attibutes ini tidak dimasukan maka ketika kita menghapus nested maka record tersebut akan tetap ada di database.
RECORD TETAP ADA?
Inilah yang penulis baru-baru ini alami, meskipun semua attributes dari line_items model sudah dimasukan di strong params tentu saja dengan penambahan "_destroy" ternyata record yang dihapus dinested masih tetap tampil ketika melakukan edit untuk order.
SOLUSI
Yang dilakukan pertama kali adalah mengecek schema.rb dari table line_item apakah memiliki column deleted_at atau tidak. Jika ternyata ada, maka dua cara yang pernah penulis lakukan untuk mengatasi permasalahan diatas, yaitu :
1 . Membuat migrasi baru untuk meremove column deleted_at
2. Edit orders_controller.rb
Setelah itu lakukan pengetesan untuk menghapus nested record, dan boom record yang semula tidak bisa dihapus akan hilang.
Demikian yang bisa disampaikan untuk pembahasan ini,
Selamat mencoba dan Happy Coding.
STUDI KASUS
Misal dalam aplikasi yang kita buat terdapat model Order dan LineItem.
order.rb
class Order < ActiveRecord::Base
has_many :line_items, :dependent => :destroy
accepts_nested_attributes_for :line_items, allow_destroy: true
end
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
belongs_to :order
end
Di orders_controller.rb untuk Rails 4 jangan lupa dibagian strong_params untuk menyertakan attributes dari line_items
orders_controller.rb
def order_params
params.require(:order).permit(:order_number, :order_date, :line_items_attributes => [:id, :item_name, :price, :_destroy])
end
params.require(:order).permit(:order_number, :order_date, :line_items_attributes => [:id, :item_name, :price, :_destroy])
end
Yang harus diingat untuk nested_form di rails 4 adalah memasukan attributes "_destroy" di attributes child, jika attibutes ini tidak dimasukan maka ketika kita menghapus nested maka record tersebut akan tetap ada di database.
RECORD TETAP ADA?
Inilah yang penulis baru-baru ini alami, meskipun semua attributes dari line_items model sudah dimasukan di strong params tentu saja dengan penambahan "_destroy" ternyata record yang dihapus dinested masih tetap tampil ketika melakukan edit untuk order.
SOLUSI
Yang dilakukan pertama kali adalah mengecek schema.rb dari table line_item apakah memiliki column deleted_at atau tidak. Jika ternyata ada, maka dua cara yang pernah penulis lakukan untuk mengatasi permasalahan diatas, yaitu :
1 . Membuat migrasi baru untuk meremove column deleted_at
$ rails g migration remove_deleted_at_in_line_items
$ rake db:migrate
$ rake db:migrate
2. Edit orders_controller.rb
def update
@order.line_items.where('deleted_at IS NOT NULL').delete_all
...
end
@order.line_items.where('deleted_at IS NOT NULL').delete_all
...
end
Setelah itu lakukan pengetesan untuk menghapus nested record, dan boom record yang semula tidak bisa dihapus akan hilang.
Demikian yang bisa disampaikan untuk pembahasan ini,
Selamat mencoba dan Happy Coding.
Tidak ada komentar:
Posting Komentar