Datatables, JavaScript ve jQuery ile yapılan sıralama,sayfalama yada arama işlemlerini düz bir html tablosu üzerinde kullanılmasını sağlar. Daha iyi bir kullanıcı arayüzü vardır ve kullanıcıya birçok seçenek sunar. Bu yazıda Rails’e nasıl entegre edileceği gösterilmektedir.
İlk olarak Gemfile içerisine aşağıdaki gemlerin yüklenip bundle edilmesi gerekmektedir.
Ben sayfalama işlemi için kaminari gemini kullandım. Bu işlem için benzer gemlerde kullanılabilir. Ama datatables ayarlaması yapılırken birkaç yerin değiştirilmesi gerekir.
Sistemi bundle ettikten sonra layouts içerisinde application.html.erb dosyasınıza yada datatables hangi view sayfasında oluşacaksa o sayfanının içerisinde gerekli kütüphaneleri eklemeliyiz.
app dizini altında datatables adında bir dizin oluşturalım ve ajax server side işlemlerini için gerçekleştirdiğimiz yapılandırmaları attendants_datatable.rb içerisine yerleştirelim. Burada önemli olan kısım parametrelerdir. Rails sürümünde dolayı internette çoğu yerde parametreler farklı isimlerde geçmektedir. Parametre isimlerinizi rails uygulaması çalışırken loglardan takip ederek bulabilirsiniz. Örnek olarak benim uygulamamdaki parametreler;
Eski parametreler ise ;
Bunları karşılaştıracak olursak;
params[:iDisplayLength] = params[:length]
params[:iDisplayStart] = params[:start]
params[:iSortCol_0] = params[:column]
params[:sSortDir_0] = params[:dir]
params[:sSearch] = params[:search][:value]
Sonuç olarak dosyamızın içeriği şu şekilde oluyor:
# encoding: UTF-8classAttendantsDatatabledelegate:params,:h,:link_to,:number_to_currency,to::@viewdefinitialize(view)@view=viewenddefas_json(options={}){sEcho:params[:sEcho].to_i,iTotalRecords:Attendant.count,iTotalDisplayRecords:attendants.total_count,#kaminari gemine göre düzenlendi.aaData:data}endprivatedefdataattendants.mapdo|attendant|[h(attendant.first_name),h(attendant.last_name),h(attendant.title_name),link_to("Görüntüle",attendant)+" | "+link_to("Düzenle","#")+" | "+link_to("Sil",attendant,method::delete)]endenddefattendants@attendants||=fetch_attendantsenddeffetch_attendantsattendants=Attendant.order("#{sort_column}#{sort_direction}").page(page).per(per_page)ifparams[:search].present?attendants=attendants.where("first_name like :s or last_name like :s ",s:"%#{params[:search][:value]}%")endattendantsenddefpageparams[:start].to_i/per_page+1enddefper_pageparams[:length].to_i>0?params[:length].to_i:10enddefsort_columncolumns=%w[first_name last_name]columns[params[:column].to_i]enddefsort_directionparams[:dir]=="desc"?"desc":"asc"endend
Son olarak Controller’da json kısmına küçük bir eklenti yapıyoruz.