Gem source code Demo source code
Author: Bogdan Gusiev

User Grid (basic) Time Entry Grid (advanced) Document Grid (Mongoid)

Users Grid

Grid:

class UsersGrid
  include Datagrid

  #
  # 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)]})
  filter(:registered_at, :date, :range => true)
  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 demo.')"
  end




end

Controller:

class UsersController < ApplicationController

  def index
    @users_grid = UsersGrid.new(params[:users_grid]) 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
98 Greta Dach Yes Delete
42 Gus Jewess Yes Delete
77 Jeffry Osinski Yes Delete
44 Anahi Rice Yes Delete
21 Albina Morissette Yes Delete
78 Davion Koepp Yes Delete
47 Makenna Stark Yes Delete
48 Austin Heathcote Yes Delete
49 Dell Champlin Yes Delete
79 Isabel Okuneva Yes Delete
51 Kamron Graham Yes Delete
80 Nola Goyette Yes Delete
81 Clyde Bruen Yes Delete
82 Kasey Lemke Yes Delete
99 Nora Hagenes Yes Delete
100 Mikayla Goldner Yes Delete
85 Kattie Langosh Yes Delete
101 Makenna Jakubowski Yes Delete
59 Sheldon Harvey Yes Delete
60 Cathryn Boehm Yes Delete
61 Garfield Altenwerth Yes Delete
102 Darius Bins Yes Delete
115 Frida Goyette Yes Delete
89 Gretchen Lowe Yes Delete
65 Rosanna Schowalter Yes Delete