Fetching contributors…
Cannot retrieve contributors at this time
75 lines (50 sloc) 2.15 KB

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:

in your controller:

class ProvidersController < ApplicationController

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


in your view (assuming HAML):

      %th Name
      %th FEIN
      %th Category
      %th County
      %th State


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.