Module: EasyFilter::ModelAdditions
- Defined in:
- lib/easy_filter/model_additions.rb
Overview
Define methods for ActiveRecord
Instance Method Summary collapse
Instance Method Details
#easy_filter(params, prefixes = { main: 'filter_', from: 'from_', to: 'to_', exact: 'exact_', sort: 'sort', direction: 'direction' }) ⇒ Object
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 30 31 32 |
# File 'lib/easy_filter/model_additions.rb', line 4 def easy_filter(params, prefixes = { main: 'filter_', from: 'from_', to: 'to_', exact: 'exact_', sort: 'sort', direction: 'direction' }) filter = self params.each do |key, value| next unless key.start_with?(prefixes[:main]) && !value.blank? && key != "#{prefixes[:main]}button" field = key.gsub(prefixes[:main], '').to_s if field.start_with?(prefixes[:from]) filter = filter.where("#{field.gsub(prefixes[:from], '')} >= ?", value) elsif field.start_with?(prefixes[:to]) filter = filter.where("#{field.gsub(prefixes[:to], '')} <= ?", value) elsif field.start_with?(prefixes[:exact]) filter = filter.where("#{field.gsub(prefixes[:exact], '')} = ?", value) else filter = filter.where("#{field} like ?", "%#{value}%") end end params[prefixes[:sort]] ||= 'id' params[prefixes[:direction]] ||= 'desc' sort_column = column_names.include?(params[prefixes[:sort]]) ? params[prefixes[:sort]] : 'id' sort_direction = %w(asc desc).include?(params[prefixes[:direction]]) ? params[prefixes[:direction]] : 'desc' filter.order("#{sort_column} #{sort_direction}") end |