Refactor datatable class to a controller concern
This commit is contained in:
parent
6cb6ddf78d
commit
7d3a6ab05c
2 changed files with 16 additions and 17 deletions
|
|
@ -1,16 +1,19 @@
|
||||||
module Admin
|
module Admin
|
||||||
class UsersController < Admin::BaseController
|
class UsersController < Admin::BaseController
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
include DatatableServersideProcessing
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@user = User.new
|
@user = User.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
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|
|
respond_to do |format|
|
||||||
format.html
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,19 @@
|
||||||
class Datatable
|
module DatatableServersideProcessing
|
||||||
delegate :params, to: :@view
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
def initialize(view, collection, search_columns, sort_columns)
|
def datatable_response(data)
|
||||||
@view = view
|
|
||||||
@collection = collection
|
|
||||||
@search_columns = search_columns
|
|
||||||
@sort_columns = sort_columns
|
|
||||||
end
|
|
||||||
|
|
||||||
def as_json(options={})
|
|
||||||
{
|
{
|
||||||
sEcho: params[:sEcho].to_i,
|
sEcho: params[:sEcho].to_i,
|
||||||
iTotalRecords: @collection.count,
|
iTotalRecords: @collection.count,
|
||||||
iTotalDisplayRecords: records.count,
|
iTotalDisplayRecords: records.count,
|
||||||
aaData: options[:data]
|
aaData: data
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def paginated_records
|
def filtered_records(collection, search_columns, sort_columns)
|
||||||
|
@collection = collection
|
||||||
|
@search_columns = search_columns
|
||||||
|
@sort_columns = sort_columns
|
||||||
paginate(records)
|
paginate(records)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -31,12 +27,12 @@ class Datatable
|
||||||
sort_direction = params[:sSortDir_0] == 'desc' ? 'desc' : 'asc'
|
sort_direction = params[:sSortDir_0] == 'desc' ? 'desc' : 'asc'
|
||||||
sort_column = @sort_columns[params[:iSortCol_0].to_i]
|
sort_column = @sort_columns[params[:iSortCol_0].to_i]
|
||||||
records = @collection.order("#{sort_column} #{sort_direction}")
|
records = @collection.order("#{sort_column} #{sort_direction}")
|
||||||
|
|
||||||
if params[:sSearch].present? && @search_columns.present?
|
if params[:sSearch].present? && @search_columns.present?
|
||||||
search_query = ''
|
search_query = @search_columns.map{ |column| "#{column} like :search" }.join(' or ')
|
||||||
@search_columns.each { |column| search_query += "#{column} like :search or " }
|
|
||||||
search_query = search_query.chomp(' or ')
|
|
||||||
records = records.where(search_query, search: "%#{params[:sSearch]}%")
|
records = records.where(search_query, search: "%#{params[:sSearch]}%")
|
||||||
end
|
end
|
||||||
|
|
||||||
records
|
records
|
||||||
end
|
end
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue