This commit is contained in:
Nishanth Vijayan 2016-08-16 10:35:18 +00:00 committed by GitHub
commit d1e16e67ab
5 changed files with 74 additions and 31 deletions

View file

@ -12,7 +12,14 @@ $(function () {
pagingType: 'full_numbers', pagingType: 'full_numbers',
order: [[ 0, 'desc' ]] order: [[ 0, 'desc' ]]
}); });
$('#userstable').DataTable({
pagingType: 'full_numbers',
processing: true,
serverSide: true,
sAjaxSource: $('#userstable').data('source'),
aoColumns: [ null, { "bSortable": false }, null, null, { "bSortable": false }, { "bSortable": false }, { "bSortable": false }, { "bSortable": false }]
});
}); });
}); });

View file

@ -1,13 +1,20 @@
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 = User.all @users = filtered_records(User.where(nil), %w(name email), %w(id state email name))
respond_to do |format|
format.html
format.json do
render json: datatable_response(@users.map {|user| users_datatable_data(user)})
end
end
end end
def show def show

View file

@ -0,0 +1,44 @@
module DatatableServersideProcessing
extend ActiveSupport::Concern
def datatable_response(data)
{
sEcho: params[:sEcho].to_i,
iTotalRecords: @collection.count,
iTotalDisplayRecords: records.count,
aaData: data
}
end
def filtered_records(collection, search_columns, sort_columns)
@collection = collection
@search_columns = search_columns
@sort_columns = sort_columns
paginate(records)
end
private
def records
@records ||= fetch_records
end
def fetch_records
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.map{ |column| "#{column} like :search" }.join(' or ')
records = records.where(search_query, search: "%#{params[:sSearch]}%")
end
records
end
def paginate(records)
per_page = params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10
page = params[:iDisplayStart].to_i / per_page + 1
records.offset((page - 1) * per_page).limit(per_page)
end
end

View file

@ -493,4 +493,17 @@ module ApplicationHelper
end end
end end
end end
def users_datatable_data(user)
[
user.id,
(user.confirmed? ? 'confirmed' : 'unconfirmed'),
user.email,
user.name,
user.registrations.where(attended: true).count,
(user.roles.empty? ? 'None' : "#{show_roles(user.get_roles.first(2))} #{'...' if user.get_roles.count > 2}"),
(view_context.link_to('View', admin_user_path(user), class: 'btn btn-success') if current_ability.can?(:show, user)),
(view_context.link_to('Edit', edit_admin_user_path(user), class: 'btn btn-primary') if current_ability.can?(:update, user))
]
end
end end

View file

@ -7,7 +7,7 @@
= "(#{@users.length})" = "(#{@users.length})"
.row .row
.col-md-12.table-responsive .col-md-12.table-responsive
%table.table.table-striped.table-bordered.table-hover.datatable %table.table.table-striped.table-bordered.table-hover#userstable{data: {source: admin_users_path(format: :json)}}
%thead %thead
%th ID %th ID
%th State %th State
@ -18,31 +18,3 @@
%th View %th View
%th Edit %th Edit
%tbody %tbody
- @users.each do |user|
%tr
%td
= user.id
%td
- if user.confirmed?
confirmed
- else
unconfirmed
%td
= user.email
%td
= user.name
%td
= user.registrations.where(attended: true).count
%td
- unless user.get_roles.blank?
= show_roles(user.get_roles.first(2))
- if user.get_roles.count > 2
= '...'
- else
None
%td
- if can? :show, user
= link_to 'View', admin_user_path(user), class: 'btn btn-success'
%td
- if can? :update, user
= link_to 'Edit', edit_admin_user_path(user), class: 'btn btn-primary'