module Acts::DataTable::SortableColumns::ActionController::ClassMethods
Public Instance Methods
sortable_columns(options = {})
click to toggle source
Sets up automatic column sorting for this controller
@param [Hash] options
Options to specify which controller actions should have column sorting and to customize the filter's behaviour. Options are everything that #around_filter would accept
@option options [Hash] :default
Default sorting columns for different actions. If none are specified for an action, the default order (usually 'id ASC') is used
@example Set up automatic column sorting only for the index action
with the default ordering "deleted_at ASC, name ASC" sortable_columns :only => [:index], :default => {:index => [['deleted_at', 'ASC'], ['name', 'ASC']]}
# File lib/acts_as_data_table/sortable_columns/action_controller.rb, line 28 def sortable_columns(options = {}) #Include on-demand methods include Acts::DataTable::Shared::ActionController::OnDemand defaults = (options.delete(:default) || {}).stringify_keys around_filter(options) do |controller, block| af_params = controller.request.params[:sortable_columns] request_defaults = defaults[controller.action_name.to_s] || [] begin #Ensure that the given action is valid if af_params.present? && %w(toggle change_direction set_base set).include?(af_params[:action].to_s) case af_action = af_params[:action].to_s when 'toggle' controller.acts_as_data_table_session.toggle_column!(af_params[:model], af_params[:column]) when 'change_direction' controller.acts_as_data_table_session.change_direction!(af_params[:model], af_params[:column]) when 'set_base' controller.acts_as_data_table_session.set_base_column!(af_params[:model], af_params[:column]) when 'set' controller.acts_as_data_table_session.set_columns!(af_params[:columns]) else raise ArgumentError.new "Invalid scope filter action '#{af_action}' was given." end end #Set the defaults as sorting columns none were set by the user if controller.acts_as_data_table_session.active_columns.empty? controller.acts_as_data_table_session.set_columns!(request_defaults) end #Set the updated filters Acts::DataTable::SortableColumns::ActionController.set_request_sort_columns!(controller.acts_as_data_table_session.active_columns) block.call ensure Acts::DataTable::SortableColumns::ActionController.clear_request_sort_columns! end end end