Sortable Table Columns
======================
Introduction
------------
A simple yet flexible Rails gem/plugin to quickly add sortable table columns to your controller and views.
Setup (Rails 3)
---------------
In your app's `Gemfile`, add:
gem "handles_sortable_columns"
To install the gem with RDoc/ri documentation, do a:
$ gem install handles_sortable_columns
Otherwise, do a `bundle install`.
Setup (Rails 2)
---------------
In your app's `config/environment.rb` add:
config.gem "handles_sortable_columns"
To install the gem, do a:
$ gem sources --add http://rubygems.org
$ gem install handles_sortable_columns
, or use `rake gems:install`.
Basic Usage
-----------
Activate the feature in your controller class:
class MyController < ApplicationController
handles_sortable_columns
...
In a view, mark up sortable columns by using the sortable_column helper:
<%= sortable_column "Product" %>
<%= sortable_column "Price" %>
In controller action, fetch and use the order clause according to current state of sortable columns:
def index
order = sortable_column_order
@records = Article.order(order) # Rails 3.
@records = Article.all(:order => order) # Rails 2.
end
That's it for basic usage. Production usage may require passing additional parameters to listed methods.
Production Usage
----------------
Please take time to read the gem's full [RDoc documentation](http://rdoc.info/projects/dadooda/handles_sortable_columns). This README has a limited coverage.
### Configuration ###
Change names of GET parameters used for sorting and pagination:
class MyController < ApplicationController
handles_sortable_columns do |conf|
conf.sort_param = "s"
conf.page_param = "p"
end
...
Change CSS class of all sortable column `` tags:
handles_sortable_columns do |conf|
conf.class = "SortableLink"
conf.indicator_class = {:asc => "AscSortableLink", :desc => "DescSortableLink"}
end
Change how text-based sort indicator looks like:
handles_sortable_columns do |conf|
conf.indicator_text = {:asc => "[asc]", :desc => "[desc]"}
end
Disable text-based sort indicator completely:
handles_sortable_columns do |conf|
conf.indicator_text = {}
end
### Helper Options ###
Explicitly specify column name:
<%= sortable_column "Highest Price", :column => "max_price" %>
Specify CSS class for this particular link:
<%= sortable_column "Name", :class => "SortableLink" %>
Specify sort direction on first click:
<%= sortable_column "Created At", :direction => :asc %>
### Fetching Sort Order ###
To fetch sort order **securely**, with **column name validation**, **default values** and **multiple sort criteria**, use the block form of `sortable_column_order`:
order = sortable_column_order do |column, direction|
case column
when "name"
"#{column} #{direction}"
when "created_at", "updated_at"
"#{column} #{direction}, name ASC"
else
"name ASC"
end
end
Feedback
--------
Send bug reports, suggestions and criticisms through [project's page on GitHub](http://github.com/dadooda/handles_sortable_columns).