Parent

Files

Class Index [+]

Quicksearch

ActiveRecord::PredicateBuilder

Public Class Methods

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

Public Instance Methods

build_from_hash(attributes, default_table) click to toggle source
    # File lib/active_record/relation/predicate_builder.rb, line 8
 8:     def build_from_hash(attributes, default_table)
 9:       predicates = attributes.map do |column, value|
10:         table = default_table
11: 
12:         if value.is_a?(Hash)
13:           table = Arel::Table.new(column, :engine => @engine)
14:           build_from_hash(value, table)
15:         else
16:           column = column.to_s
17: 
18:           if column.include?('.')
19:             table_name, column = column.split('.', 2)
20:             table = Arel::Table.new(table_name, :engine => @engine)
21:           end
22: 
23:           attribute = table[column] || Arel::Attribute.new(table, column)
24: 
25:           case value
26:           when Array, ActiveRecord::Associations::AssociationCollection, ActiveRecord::Relation
27:             values = value.to_a.map { |x|
28:               x.respond_to?(:quoted_id) ? x.quoted_id : x
29:             }
30:             attribute.in(values)
31:           when Range, Arel::Relation
32:             attribute.in(value)
33:           when ActiveRecord::Base
34:             attribute.eq(value.quoted_id)
35:           when Class
36:             # FIXME: I think we need to deprecate this behavior
37:             attribute.eq(value.name)
38:           else
39:             attribute.eq(value)
40:           end
41:         end
42:       end
43: 
44:       predicates.flatten
45:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.