Module: AwesomeSort::AwesomeSortHelper
- Defined in:
- app/helpers/awesome_sort/awesome_sort_helper.rb
Instance Method Summary collapse
Instance Method Details
#column_sort(args = {}) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'app/helpers/awesome_sort/awesome_sort_helper.rb', line 3 def column_sort(args = {}) args[:extra] ||= {} # Should pass it column_name, link_name, controller_name and # optionally width, html_options and header_classes args.reverse_merge!( header_classes: [], html_options: {} ) c_method = args[:controller_name] + "_path" klass = ["orderable"] klass << "order-#{params[:sort_order]}" if params[:sort_by] == args[:column_name] klass << args[:header_classes] klass.flatten sort_order = if params[:sort_by] == args[:column_name] && params[:sort_order] == "asc" "desc" else "asc" end content_tag(:th, width: args[:width], class: klass) do link_to( args[:link_name], public_send(c_method, { sort_order: sort_order, sort_by: args[:column_name] }.merge(args[:extra])), { remote: true }.merge(args[:html_options]) ) end end |
#sort(scope, sort_by, sort_order) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/helpers/awesome_sort/awesome_sort_helper.rb', line 31 def sort(scope, sort_by, sort_order) klass = scope.model.name.tableize.to_sym if sort_by if sorter = AwesomeSort.sorters[klass][sort_by.to_sym] sorter.call(scope, sort_order) else scope.order(sort_by => sort_order) end else if default_sorter = AwesomeSort.defaults[klass] if default_sorter.respond_to?(:call) default_sorter.call(scope) else scope.order(default_sorter => 'asc') end else scope end end end |