Total: 100
| Id | Name | Disabled | Actions | |
|---|---|---|---|---|
| 19 | crystle@mosciski.biz | Jon Lindgren | No | |
| 20 | felica@wintheiser.com | Wiley Wuckert | No | |
| 23 | buford@casperrobel.co.uk | Clifton Hintz | No | |
| 24 | elenor.rolfson@hilpertsanford.info | Mi Prosacco | No | |
| 25 | bennie@miller.info | Carlota Gottlieb | No | |
| 27 | jolynn@considine.biz | Elsa Goodwin | No | |
| 30 | dollie@damore.com | Elenora Brakus | No | |
| 31 | kenneth@nienowconsidine.biz | Elise Waelchi | No | |
| 33 | lisette_stroman@turnerfeil.co.uk | Brigid McLaughlin | No | |
| 34 | al_flatley@marvin.ca | Cristopher Dooley | No | |
| 37 | natisha.schimmel@frami.biz | Reinaldo Heidenreich | No | |
| 2 | jeffie.grady@pfefferschmeler.com | Imelda Heidenreich | Yes | |
| 64 | marilou_kutch@kshlerin.us | Isidro McCullough | Yes | |
| 76 | carisa_lueilwitz@leannon.us | Awilda Schumm | Yes | |
| 43 | yong@miller.co.uk | Almeta Adams | Yes | |
| 90 | fallon.adams@cassin.biz | German Murphy | Yes | |
| 78 | pia.metz@huel.us | Elli Dietrich | Yes | |
| 86 | rashida.hills@kling.info | Tess Nikolaus | Yes | |
| 9 | mariel.jacobson@koepp.us | Grace Kris | Yes | |
| 47 | mozelle@mclaughlin.ca | Jamison Hagenes | Yes | |
| 11 | therese@blickjacobi.biz | Sylvester Hane | Yes | |
| 48 | russel_prohaska@padberg.name | Malvina Zulauf | Yes | |
| 13 | barb.osinski@kreiger.name | Rebecca Rempel | Yes | |
| 49 | debrah@gerhold.us | Lynell Stamm | Yes | |
| 50 | tonia@cruickshank.biz | Alise Rolfson | Yes |
Grid:
class UsersGrid < ApplicationGrid
#
# Scope
#
scope do
User
end
#
# Filters
#
filter(:id, :string, multiple: ',')
filter(:email, :string)
filter(:disabled, :xboolean)
filter(:registration_type, :enum, select: User::REGISTRATION_TYPES.map {|r| [r.humanize, r]})
filter(
:logins_count, :integer,
range: true,
default: proc { User.minimum(:logins_count)..User.maximum(:logins_count)},
)
filter(:registered_at, :date, range: true)
filter(:condition, :dynamic, header: "Dynamic condition")
column_names_filter(header: "Extra Columns", checkboxes: true)
#
# Columns
#
column(:id, mandatory: true)
column(:email, mandatory: true) do |model|
format(model.email) do |value|
link_to value, "mailto:#{value}", class: 'link', target: '_blank'
end
end
column(:name, mandatory: true)
column(:disabled, mandatory: true) do
disabled? ? "Yes" : "No"
end
column(:registration_type) do |record|
record.registration_type.humanize
end
column(:logins_count)
column(:registered_at) do |record|
format(record.registered_at.to_date) do |value|
value.strftime("%b %d, %Y")
end
end
column(:age, header: "Registration Age") do |record|
age = (DateTime.now.in_time_zone - record.registered_at) / 1.day
"#{age.to_i} days"
end
column(:actions, html: true, mandatory: true) do |record|
content_tag(:div) do
link_to "Delete", "javascript:alert('Oh common! This is a demo.')", class: 'btn btn-sm btn-primary'
end
end
end
Controller:
class UsersController < ApplicationController
def index
@users_grid = UsersGrid.new(params[:g]) do |scope|
scope.page(params[:page])
end
end
end
View:
- grid = @users_grid
.grid-index-grid
%div{class: 'overflow-x-auto p-4 overflow-y-hidden'}
= datagrid_form_with model: grid, url: users_path
.text-xl.m-3
Total: #{grid.assets.total_count}
= datagrid_table(grid, html: {class: 'table'})
= paginate grid.assets, window: 3
%div
= render :partial => "shared/source", :object => grid