Skip to content

kbaum/rails-datatables

 
 

Repository files navigation

Simple Datatables for Kaminari

This fork works with kaminari gem!

Connects two awesome plugins - Datatables for Jquery and Meta Search together for Rails 3.1

Install

Add the following to your Gemfile to install simple datatables:

gem 'rails-datatables'

After bundle install add this line to rails 3.1 assets pipeline and restart server:

//= require rails-datatables

Installation completed.

Description

There are two ways to map awesome Datatables plugin request fields for Rails.

  • First is to convert request on the server side

  • Second is to prepare correct request on the client side

This gem provides interface for the second way. To use it you should do the following easy three steps:

Create simple meta_search and kaminari (optionally) controller action as usual and add “.datatables” format

respond_to :html, :datatables

def search
  @products = Product.search(params[:search]).page(params[:page]).per(params[:per_page])
  respond_with @products
end

Use standard datatables initializer options for creating table:

  • bServerSide: true

  • sAjaxSource: path to your controller

  • fnServerData: point to simpleDatatables function

  • aoColumns: you should define all searchable/fiterable sName attributes here. Use format as used in meta_search (with underscores)

Create Jsonify view with column values for columns listed in aoColumns. See example for clarification.

This gem uses:

  • meta_search for nice search and sort request syntax mapping

  • jsonify for simple output generation

This gem provides integration with:

  • will_paginate for nice pagination request syntax mapping

  • kaminari for pagination as well it works with both so choose either one not both.

Gem works only with rails 3.1.

Gem includes datatables library and fnSetFilteringDelay plugin so you haven’t include it by yourself.

Pagination

Rails-Datatables is compatible with Kaminari AND Will paginate. Datatables will provide you “page” and “per_page” request params.

If you do not use pagination do not forget to save search result to some variable with meta_search relation method:

@products = Product.search(params[:search]).relation

Search for all fields

Note that fulltext search will work only with text fields due to meta_search restrictions. To prevent errors use bSearchable: false for non-text columns in aoColumns field.

Regex search

Due to meta_search restrictions it is impossible to use regex search for now.

Instead, this gem recognizes bSearch flag as “contains” meta_search finder.

By default “starts_with” is used due to database performance reasons.

Independent fields search will always search using “starts_with” finder.

Example

The following code will show products list datatables. Manufacturer is belongs_to association for Product.

In your controller:

respond_to :html, :datatables

# GET /products/search
def search
  @products = Product.search(params[:search]).paginate(:page => params[:page], :per_page=>params[:per_page])
  respond_with @products
end

In your search view:

@products.each do |product|
  json << [product.name, product.manufacturer.name]
end

In your index view:

%table#products
  %thead
    %tr
      %th= Product.human_attribute_name :name
      %th= Product.human_attribute_name :manufacturer

  %tbody

In your javascript:

$("products").dataTable($("table#products"), {
    "sAjaxSource"     : "/products/search.datatables",
    "aaSorting"       : [[0, 'asc']],
    "aoColumns"       : [
      {"sName":"name"},
      {"sName":"manufacturer_name"},
    ],
    "bServerSide"     : true,
    "fnServerData"    : simpleDatatables
  });

Copyright © Grigory Dmitrenko, 2011. See LICENSE for details.

About

Simple Datatables.net integration for rails 3.1

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%