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
51 Cherly Kovacek No Delete
52 Shannon Botsford Yes Delete
53 Lesia Hyatt No Delete
54 Sixta Bashirian No Delete
55 Myrtle O'Conner No Delete
56 Lillie Hamill No 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
62 Salley Kilback No Delete
63 Wen Daniel No Delete
64 Isidro McCullough Yes Delete
65 Adrienne Eichmann No Delete
66 Arnita Smith No Delete
67 Shara Labadie No Delete
68 Cathey Prohaska No Delete
69 Evangelina Pfeffer No Delete
70 Jarvis Ryan Yes Delete
71 Alex Legros Yes Delete
72 Johnny Spinka No Delete
73 Jewell Kreiger No Delete
74 Vivien Murray No Delete
75 Dahlia Hilll No Delete