Gem source code Demo source code
Author: Bogdan Gusiev

User Grid (basic) Time Entry Grid (advanced)

Users Grid

Grid:

class UsersGrid < BaseGrid

  #
  # 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)]},
    input_options: {type: 'number'},
  )
  filter(:registered_at, :date, range: true, input_options: {type: 'date'})
  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}"
    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|
    record.registered_at.to_date
  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|
    link_to "Delete", "javascript:alert('Oh common! This is a demo.')"
  end
end

Controller:

class UsersController < ApplicationController

  def index
    @users_grid = UsersGrid.new(params[:g]) do |scope|
      scope.page(params[:page])
    end
  end
end

View:

 <h3>Users Grid</h3>

<div class="right">
  <%= render :partial => "shared/source", :object => @users_grid %>
</div>
<div class="left">
  <%= datagrid_form_for @users_grid, url: users_path %>


  <div class='total'>Total: <%= @users_grid.assets.total_count %></div>
  <%= datagrid_table(@users_grid) %>
  <%= paginate @users_grid.assets %>
</div>
-
-
Total: 100
Id Name Disabled Actions
26 Jamie Stehr Yes Delete
27 Elsa Goodwin No Delete
28 Terisa Ruecker Yes Delete
29 Jeanne Witting Yes Delete
30 Elenora Brakus No Delete
31 Elise Waelchi No Delete
32 Milagros Lemke Yes Delete
33 Brigid McLaughlin No Delete
34 Cristopher Dooley No Delete
35 Treena Wolf Yes Delete
36 Thaddeus Stanton Yes Delete
37 Reinaldo Heidenreich No Delete
38 Jackson Kozey No Delete
39 Gonzalo Blanda No Delete
40 Micheal Jenkins Yes Delete
41 Elida Zulauf No Delete
42 Tami Gibson No Delete
43 Almeta Adams Yes Delete
44 Juliana Hauck No Delete
45 Huong McKenzie No Delete
46 Nelson Leannon No Delete
47 Jamison Hagenes Yes Delete
48 Malvina Zulauf Yes Delete
49 Lynell Stamm Yes Delete
50 Alise Rolfson Yes Delete