Sha256: 91be8c1cae7624af71cfb983a17bb4448706e5855eda4aba1f6a7c2455a5d9cb
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
module EasyFilter # Define methods for ActiveRecord module ModelAdditions 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 = del_prefix(key, prefixes[:main]) filter = add_where(filter, field, value, prefixes) 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 private def add_where(filter, field, value, prefixes) if field.start_with?(prefixes[:from]) filter.where("#{del_prefix(field, prefixes[:from])} >= ?", value) elsif field.start_with?(prefixes[:to]) filter.where("#{del_prefix(field, prefixes[:to])} <= ?", value) elsif field.start_with?(prefixes[:exact]) filter.where("#{del_prefix(field, prefixes[:exact])} = ?", value) else filter.where("#{field} like ?", "%#{value}%") end end def del_prefix(name, prefix) return name.gsub(prefix, '').to_s if name.start_with?(prefix) name end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
easy_filter-0.0.4 | lib/easy_filter/model_additions.rb |