Module: UserSortable

Defined in:
app/models/application_record.rb

Instance Method Summary collapse

Instance Method Details

#user_sort(term_opts, **field_mappings) ⇒ Object

Sort a collection according to a user selection, by mapping user selectable values to column names. SQL injection safe.

Parameters:

  • term_opts

    Hash of search term options: { term: params, default: :created_at }

  • field_mappings

    Hash of user-selectable values to column names: { age: :created_at, rep: :threshold }



95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/models/application_record.rb', line 95

def user_sort(term_opts, **field_mappings)
  default = term_opts[:default] || :created_at
  requested = term_opts[:term]
  direction = term_opts[:direction] || :desc
  if requested.nil? || field_mappings.exclude?(requested.to_sym)
    $active_search_param = default
    default.is_a?(Symbol) ? order(default => direction) : order(default)
  else
    requested_val = field_mappings[requested.to_sym]
    $active_search_param = requested_val
    requested_val.is_a?(Symbol) ? order(requested_val => direction) : order(requested_val)
  end
end