Sha256: 15d6269660c16334eaf7d5be08bf884a641d0da4fbfc78a39789b60d7d5cb7ee
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
module ActiveRecord module Filters class Filter include ActiveRecord::Filters::Base attr_accessor :klass attr_accessor :attributes attr_accessor :options def initialize(klass, attributes, options) self.klass = klass self.attributes = attributes self.options = options end def call(params) relation = scoped columns.inject(relation) do |relation, column| # TODO: have a better way to compare this? param = if association? && relation.arel_table != column.relation key = "#{association.name}_attributes" params[key][column.name] if params[key] else params[column.name] end next relation if param.blank? column_name = klass.arel_table[column.name] case column.type when :string relation.where(column_name.matches("#{param}%")) when :decimal, :float, :integer relation.where(column_name.eq(I18n::Alchemy::NumericParser.parse(param))) when :time # TODO: why arel uses arel/attributes/time for date columns? relation.where(column_name.eq(I18n::Alchemy::DateParser.parse(param))) else relation.where(column_name.eq(param)) end end end protected def columns @columns ||= begin columns = attributes.map do |attribute| find_column(klass, attribute) end if association columns += association.klass.accessible_attributes.map do |attribute| find_column(association.klass, attribute) end end columns.compact end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
unico-training-7.8.0 | lib/active_record/filters/filter.rb |