Parent

Files

Class/Module Index [+]

Quicksearch

ActiveRecord::PredicateBuilder

Public Class Methods

new(engine) click to toggle source
# File lib/active_record/relation/predicate_builder.rb, line 4
def initialize(engine)
  @engine = engine
end

Public Instance Methods

build_from_hash(attributes, default_table) click to toggle source
# File lib/active_record/relation/predicate_builder.rb, line 8
def build_from_hash(attributes, default_table)
  predicates = attributes.map do |column, value|
    table = default_table

    if value.is_a?(Hash)
      table = Arel::Table.new(column, :engine => @engine)
      build_from_hash(value, table)
    else
      column = column.to_s

      if column.include?('.')
        table_name, column = column.split('.', 2)
        table = Arel::Table.new(table_name, :engine => @engine)
      end

      attribute = table[column] || Arel::Attribute.new(table, column)

      case value
      when Array, ActiveRecord::Associations::AssociationCollection, ActiveRecord::Relation
        values = value.to_a.map { |x|
          x.is_a?(ActiveRecord::Base) ? x.id : x
        }
        attribute.in(values)
      when Range, Arel::Relation
        attribute.in(value)
      when ActiveRecord::Base
        attribute.eq(value.id)
      when Class
        # FIXME: I think we need to deprecate this behavior
        attribute.eq(value.name)
      else
        attribute.eq(value)
      end
    end
  end

  predicates.flatten
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.