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
85 Bong Witting No Delete
87 Jewell Swaniawski No Delete
88 Crissy Brekke No Delete
89 Verla Friesen No Delete
92 Ophelia Hermiston No Delete
93 Eleonore Wisozk No Delete
95 Palmira Fay No Delete
96 Joelle Hodkiewicz No Delete
97 Myriam Von No Delete
98 Ethyl Ankunding No Delete
99 Ashleigh Kris No Delete
63 Wen Daniel No Delete
3 Tamika Cronin No Delete
4 Shane Glover No Delete
5 Raquel Runolfsson No Delete
6 Deja Corkery No Delete
7 Royce Spencer No Delete
8 Claudette Hagenes No Delete
10 Dorthey Turner No Delete
12 Li Considine No Delete
14 Pearlie McGlynn No Delete
15 Marna Ritchie No Delete
19 Jon Lindgren No Delete
20 Wiley Wuckert No Delete
23 Clifton Hintz No Delete