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
52 Shannon Botsford Yes Delete
9 Grace Kris Yes Delete
32 Milagros Lemke Yes Delete
90 German Murphy Yes Delete
91 Felisa Jaskolski Yes Delete
13 Rebecca Rempel Yes Delete
21 Dania Crona Yes Delete
94 Elisa Wintheiser Yes Delete
57 Bridgett Reilly Yes Delete
58 Vernia Dietrich Yes Delete
59 Britney Ruecker Yes Delete
60 Kellie Cassin Yes Delete
61 Flavia Will Yes Delete
100 Penney Schowalter Yes Delete
68 Cathey Prohaska No Delete
69 Evangelina Pfeffer No Delete
72 Johnny Spinka No Delete
73 Jewell Kreiger No Delete
74 Vivien Murray No Delete
75 Dahlia Hilll No Delete
77 Desmond Murray No Delete
79 Kaye Greenfelder No Delete
80 Bok Wolf No Delete
81 Gwendolyn Satterfield No Delete
84 Blake Hoppe No Delete