diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 7abdcfd0..5d01278b 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -1,16 +1,19 @@ module Admin class UsersController < Admin::BaseController load_and_authorize_resource + include DatatableServersideProcessing def new @user = User.new end def index - users_datatable = Datatable.new(view_context, User.where(nil), %w(name email), %w(id state email name)) + @users = filtered_records(User.where(nil), %w(name email), %w(id state email name)) respond_to do |format| format.html - format.json { render json: users_datatable.to_json(data: users_datatable.paginated_records.map {|user| users_datatable_data(user)}) } + format.json do + render json: datatable_response(@users.map {|user| users_datatable_data(user)}) + end end end diff --git a/app/datatables/datatable.rb b/app/controllers/concerns/datatable_serverside_processing.rb similarity index 71% rename from app/datatables/datatable.rb rename to app/controllers/concerns/datatable_serverside_processing.rb index 6f5d4340..42f7b3cf 100644 --- a/app/datatables/datatable.rb +++ b/app/controllers/concerns/datatable_serverside_processing.rb @@ -1,23 +1,19 @@ -class Datatable - delegate :params, to: :@view +module DatatableServersideProcessing + extend ActiveSupport::Concern - def initialize(view, collection, search_columns, sort_columns) - @view = view - @collection = collection - @search_columns = search_columns - @sort_columns = sort_columns - end - - def as_json(options={}) + def datatable_response(data) { sEcho: params[:sEcho].to_i, iTotalRecords: @collection.count, iTotalDisplayRecords: records.count, - aaData: options[:data] + aaData: data } end - def paginated_records + def filtered_records(collection, search_columns, sort_columns) + @collection = collection + @search_columns = search_columns + @sort_columns = sort_columns paginate(records) end @@ -31,12 +27,12 @@ class Datatable sort_direction = params[:sSortDir_0] == 'desc' ? 'desc' : 'asc' sort_column = @sort_columns[params[:iSortCol_0].to_i] records = @collection.order("#{sort_column} #{sort_direction}") + if params[:sSearch].present? && @search_columns.present? - search_query = '' - @search_columns.each { |column| search_query += "#{column} like :search or " } - search_query = search_query.chomp(' or ') + search_query = @search_columns.map{ |column| "#{column} like :search" }.join(' or ') records = records.where(search_query, search: "%#{params[:sSearch]}%") end + records end