Data Table

Makes it easy to ship data to a jQuery DataTable from ActiveRecord or Mongoid.

Quick example:

in your javascript:

$(".providers-data-table").dataTable({"bJQueryUI"       : true,
                                      "bProcessing"     : true,
                                      "bAutoWidth"      : false,
                                      "sPaginationType" : "full_numbers",
                                      "aoColumns"       : [{"sType" : "html"}, null, null, null, null],
                                      "aaSorting"       : [[0, 'asc'], [1, 'asc']],
                                      "bServerSide"     : true,
                                      "sAjaxSource"     : "/providers.json" }).fnSetFilteringDelay();

Note: the fnSetFilteringDelay() call isn’t required but highly recommended: datatables.net/plug-ins/api#fnSetFilteringDelay

in your controller:

class ProvidersController < ApplicationController

  def index
    respond_to do |wants|
      wants.html
      wants.json do
        render(:json => Provider.for_data_table(self, %w(name fein categories.name county state), %w(name fein)) do |provider|
          ["<%= link_to(provider, provider) %>", provider.fein, provider.category.name, provider.county, provider.state]
        end)
      end
    end
  end

end

in your view (assuming HAML):

%table.providers-data-table
  %thead
    %tr
      %th Name
      %th FEIN
      %th Category
      %th County
      %th State

  %tbody

and in your Gemfile

# for ActiveRecord
gem "will_paginate"

# for Mongoid
gem "kaminari"

Advanced Features

Date fields

In order to handle date fields properly, enclose the field name in an array along with a hash like so:

Provider.for_data_table(self, %w(name fein opened_on), ["name", "fein", ["opened_on", {:date => true}]]) { ... }

Split fields

To handle split fields, that is to handle searching for “x-y”, add a hash with a split key:

Provider.for_data_table(self, %w(name fein suffix), ["name", ["fein", "suffix", {:split => "-"}]]) { ... }

Copyright © 2010-2011 Jason Dew. See LICENSE for details.