raymond¶ ↑
Gives your view tables nice sorting ability with ease.
Usage¶ ↑
Prepare your model: specify, which columns may get sorted.
class VeryImportantData < ActiveRecord::Base include Raymond::Model # sort by these db table columns allow_sort_by :name, :created_at # sort by this method, that is _not_ a db table column allow_sort_by :my_custom_method, :db => false # do a very customized sort allow_sort_by :my_sort_key, :method => Proc.new{|obj| obj.my_method(:my_param)} ...
Not very much to do in the Controller:
class VeryImportantDataController < ApplicationController def index # create the sorting object and pass the sorting parameters @sorting = Raymond::Control.new(self, params[:sort]) # fetch the ordered result from the db; do method based sorting if necessary. @very_important_data = @sorting.result respond_to do |format| format.html # index.html.erb end end ...
Use a helper method in your view to show the table headers:
<tr> <th><%= sort_header :name, 'Name' %></th> <th><%= sort_header :my_custom_method, 'Column #2' %></th> <th><%= sort_header :my_sort_key, 'Column #3' %></th> <th><%= sort_header :created_at, 'Since' %></th> </tr>
And the helper method (not included in Gem):
def sort_header(key, label) current = @sorting.current_attr?(key) symbol = current ? (@sorting.dir == :up ? '▲' : '▼') : '' link_to "#{symbol}#{label}", "?sort=#{key}-#{current ? @sorting.inverse_dir : Raymond::DEFAULT_SORTING_DIR.to_s}" end
More Customization¶ ↑
@sorting = Raymond::Control.new(self, params[:sort])
In the example above, the class to query it determined by the name of the controller applying Ruby on Rails conventions (PeopleController will use the class Person). Passing the option :class will allow you to use any other class:
@sorting = Raymond::Control.new(self, params[:sort], :class => PlzUseThisClass)
Often, you may want more control of the underlying SQL statement. Thanks to Arel, anything is possible:
@comments = @sorting.result do |active_relation| active_relation.where(:deleted => false).limit(20) end
What’s next?¶ ↑
There’s more to come, this is only version 0.0.1.
Copyright¶ ↑
Copyright © 2010 Christoph Petschnig. See LICENSE for details.