Module: ActiveRecord::Core::ClassMethods
Relationships & Source Files | |
Defined in: | activerecord/lib/active_record/core.rb |
Instance Attribute Summary
-
#filter_attributes
rw
Returns columns which shouldn’t be exposed while calling #inspect.
-
#filter_attributes=(filter_attributes)
rw
Specifies columns which shouldn’t be exposed while calling #inspect.
Instance Method Summary
- #cached_find_by(keys, values) private
- #inherited(subclass) private
- #relation private
-
#arel_table
Internal use only
Returns an instance of
::Arel::Table
loaded with the current table name. - #cached_find_by_statement(connection, key, &block) Internal use only
- #find(*ids) Internal use only
- #find_by(*args) Internal use only
- #find_by!(*args) Internal use only
- #generated_association_methods Internal use only
- #initialize_find_by_cache Internal use only
- #initialize_generated_modules Internal use only
-
#inspect
Internal use only
Returns a string like ‘Post(id:integer, title:string, body:text)’.
- #inspection_filter Internal use only
- #predicate_builder Internal use only
- #type_caster Internal use only
Instance Attribute Details
#filter_attributes (rw)
Returns columns which shouldn’t be exposed while calling #inspect.
# File 'activerecord/lib/active_record/core.rb', line 338
def filter_attributes if @filter_attributes.nil? superclass.filter_attributes else @filter_attributes end end
#filter_attributes=(filter_attributes) (rw)
Specifies columns which shouldn’t be exposed while calling #inspect.
# File 'activerecord/lib/active_record/core.rb', line 347
def filter_attributes=(filter_attributes) @inspection_filter = nil @filter_attributes = filter_attributes end
Instance Method Details
#arel_table
This method is for internal use only.
Returns an instance of ::Arel::Table
loaded with the current table name.
#cached_find_by(keys, values) (private)
[ GitHub ]# File 'activerecord/lib/active_record/core.rb', line 430
def cached_find_by(keys, values) with_connection do |connection| statement = cached_find_by_statement(connection, keys) { |params| wheres = keys.index_with do |key| if key.is_a?(Array) [key.map { params.bind }] else params.bind end end where(wheres).limit(1) } statement.execute(values.flatten, connection, allow_retry: true).then do |r| r.first rescue TypeError raise ActiveRecord::StatementInvalid end end end
#cached_find_by_statement(connection, key, &block)
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 392
def cached_find_by_statement(connection, key, &block) # :nodoc: cache = @find_by_statement_cache[connection.prepared_statements] cache.compute_if_absent(key) { StatementCache.create(connection, &block) } end
#find(*ids)
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 259
def find(*ids) # :nodoc: # We don't have cache keys for this stuff yet return super unless ids.length == 1 return super if block_given? || primary_key.nil? || scope_attributes? id = ids.first return super if StatementCache.unsupported_value?(id) cached_find_by([primary_key], [id]) || raise(RecordNotFound.new("Couldn't find #{name} with '#{primary_key}'=#{id}", name, primary_key, id)) end
#find_by(*args)
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 272
def find_by(*args) # :nodoc: return super if scope_attributes? hash = args.first return super unless Hash === hash hash = hash.each_with_object({}) do |(key, value), h| key = key.to_s key = attribute_aliases[key] || key return super if reflect_on_aggregation(key) reflection = _reflect_on_association(key) if !reflection value = value.id if value.respond_to?(:id) elsif reflection.belongs_to? && !reflection.polymorphic? key = reflection.join_foreign_key pkey = reflection.join_primary_key if pkey.is_a?(Array) if pkey.all? { |attribute| value.respond_to?(attribute) } value = pkey.map do |attribute| if attribute == "id" value.id_value else value.public_send(attribute) end end composite_primary_key = true end else value = value.public_send(pkey) if value.respond_to?(pkey) end end if !composite_primary_key && (!columns_hash.key?(key) || StatementCache.unsupported_value?(value)) return super end h[key] = value end cached_find_by(hash.keys, hash.values) end
#find_by!(*args)
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 319
def find_by!(*args) # :nodoc: find_by(*args) || where(*args).raise_record_not_found_exception! end
#generated_association_methods
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 327
def generated_association_methods # :nodoc: @generated_association_methods ||= begin mod = const_set(:GeneratedAssociationMethods, Module.new) private_constant :GeneratedAssociationMethods include mod mod end end
#inherited(subclass) (private)
[ GitHub ]# File 'activerecord/lib/active_record/core.rb', line 398
def inherited(subclass) super # initialize cache at class definition for thread safety subclass.initialize_find_by_cache unless subclass.base_class? klass = self until klass.base_class? klass.initialize_find_by_cache klass = klass.superclass end end subclass.class_eval do @arel_table = nil @predicate_builder = nil @inspection_filter = nil @filter_attributes ||= nil @generated_association_methods ||= nil end end
#initialize_find_by_cache
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 255
def initialize_find_by_cache # :nodoc: @find_by_statement_cache = { true => Concurrent::Map.new, false => Concurrent::Map.new } end
#initialize_generated_modules
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 323
def initialize_generated_modules # :nodoc: generated_association_methods end
#inspect
This method is for internal use only.
Returns a string like ‘Post(id:integer, title:string, body:text)’
# File 'activerecord/lib/active_record/core.rb', line 364
def inspect # :nodoc: if self == Base || singleton_class? super elsif abstract_class? "#{super}(abstract)" elsif !schema_loaded? && !connected? "#{super} (call '#{super}.load_schema' to load schema informations)" elsif table_exists? attr_list = attribute_types.map { |name, type| "#{name}: #{type.type}" } * ", " "#{super}(#{attr_list})" else "#{super}(Table doesn't exist)" end end
#inspection_filter
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 352
def inspection_filter # :nodoc: if @filter_attributes.nil? superclass.inspection_filter else @inspection_filter ||= begin mask = InspectionMask.new(ActiveSupport::ParameterFilter::FILTERED) ActiveSupport::ParameterFilter.new(@filter_attributes, mask: mask) end end end
#predicate_builder
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 384
def predicate_builder # :nodoc: @predicate_builder ||= PredicateBuilder.new(TableMetadata.new(self, arel_table)) end
#relation (private)
[ GitHub ]#type_caster
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/core.rb', line 388
def type_caster # :nodoc: TypeCaster::Map.new(self) end