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
76 Awilda Schumm Yes Delete
77 Desmond Murray No Delete
78 Elli Dietrich Yes Delete
79 Kaye Greenfelder No Delete
80 Bok Wolf No Delete
81 Gwendolyn Satterfield No Delete
82 Beverlee Auer Yes Delete
83 Tamera Bogan Yes Delete
84 Blake Hoppe No Delete
85 Bong Witting No Delete
86 Tess Nikolaus Yes Delete
87 Jewell Swaniawski No Delete
88 Crissy Brekke No Delete
89 Verla Friesen No Delete
90 German Murphy Yes Delete
91 Felisa Jaskolski Yes Delete
92 Ophelia Hermiston No Delete
93 Eleonore Wisozk No Delete
94 Elisa Wintheiser Yes 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
100 Penney Schowalter Yes Delete