This plugin gives us two functionalities
-filters for narrowing index scope -ordenation for index elements
script/plugin install git://github.com/eLafo/sortable_index_filters.git
It creates two objects:
an object @conditions to be used in index action with our favourite find method which accepts :conditions parameter, such as find or paginate -from will paginate-. an object @filter which is the result of parsing params[:filter]
In order to setup a filter for index action, you should to insert the next line in your controller
has_index_filters :method => :option
You can declare as many method as you wish Available options are:
:like - it creates a LIKE condition :equal - it creates a = condition :less - it creates a < condition :less_or_equal - it creates a <= condition :greater - it creates a > condition :greater_or_equal - it creates a >= condition
For example, the next line
has_index_filters :code => :like, :client_id => :equal
finally will create next conditions:
code LIKE '%CODE_PARAMETER%' AND client_id = CLIENT_ID_PARAMETER
In the index view, you should insert a form for submiting filter parameters. The form’s fields should be named filter for this plugin to work.
For the previous example, the fields would be
- filter[code] - filter[client_id]
and the view could be like this:
<%= form_tag foos_url, :method => :get %> <%= text_field_tag 'filter[code]', (@filter[:code] rescue '') %> <%= text_field_tag 'filter[client_id], (@filter[:client_id] rescue '') %> <%= submit_tag 'filter' %> </form>
If you want your index elements to be sortable by fields, you must include this line in your controller
has_sortable_fields
Controller will expect two params:
index_order_field: The field which index results are sorted by index_order_direction: The sorting direction -ASC or DESC
And will generate an instance variable @index-order which can be used with find, will paginate, etc methods like this:
@foos = Foo..paginate( :page => params[:page], :per_page => PAGINATION_PER_PAGE, :conditions => @conditions, #this variable is the one generated by has_index_filters method :order => @index_order #this is the variable generated by has_sortable_fields )
You can use the helper
method sortable_field(name, field, options = {}, html_options = {})
It creates a link to index url with index_order_field and index_order_direction params
name: name for the link field: field for index elements to be sorted by
Example
<%= sortable_field('code', :code) %></th>
This plugin is based on my mentor Daniel Mata's code http://danimataonrails.blogspot.com
© 2010 Javier Lafora Rey
This code is available under the MIT license.