Class: ActiveRecord::Reflection::MacroReflection
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
AbstractReflection
|
|
Instance Chain:
self,
AbstractReflection
|
|
Inherits: |
ActiveRecord::Reflection::AbstractReflection
|
Defined in: | activerecord/lib/active_record/reflection.rb |
Overview
::ActiveRecord::Base
class for AggregateReflection
and AssociationReflection
. Objects of AggregateReflection
and AssociationReflection
are returned by the ClassMethods
.
Class Method Summary
AbstractReflection
- Inherited
Instance Attribute Summary
- #active_record readonly
- #autosave=(autosave) writeonly
-
#name
readonly
Returns the name of the macro.
-
#options
readonly
Returns the hash of options used for the macro.
- #scope readonly
- #plural_name readonly Internal use only
AbstractReflection
- Inherited
#counter_must_be_updated_by_has_many?, | |
#has_active_cached_counter? | Returns whether this association has a counter cache and its column values were backfilled (and so it is used internally by methods like |
#has_cached_counter? | Returns whether this association has a counter cache. |
#inverse_updates_counter_cache? | |
#inverse_updates_counter_in_memory?, #strict_loading?, #through_reflection? |
Instance Method Summary
-
#==(other_aggregation)
Returns
true
ifself
andother_aggregation
have the same #name attribute, #active_record attribute, andother_aggregation
has an options hash assigned to it. - #compute_class(name)
-
#klass
Returns the class for the macro.
- #scope_for(relation, owner = nil)
- #derive_class_name private
- #normalize_options(options) private
- #_klass(class_name) Internal use only
AbstractReflection
- Inherited
#alias_candidate, | |
#build_association | Returns a new, unsaved instance of the associated class. |
#build_scope, #chain, #check_validity_of_inverse!, | |
#class_name | Returns the class name for the macro. |
#constraints, #counter_cache_column, #inverse_of, | |
#inverse_which_updates_counter_cache | We need to avoid the following situation: |
#join_scope, #join_scopes, #klass_join_scope, | |
#scopes | Returns a list of scopes that should be applied for this |
#strict_loading_violation_message, #table_name, | |
#actual_source_reflection | FIXME: this is a horrible name. |
#ensure_option_not_given_as_class!, #primary_key |
Constructor Details
.new(name, scope, options, active_record) ⇒ MacroReflection
# File 'activerecord/lib/active_record/reflection.rb', line 388
def initialize(name, scope, , active_record) super() @name = name @scope = scope @options = ( ) @active_record = active_record @klass = [:anonymous_class] @plural_name = active_record.pluralize_table_names ? name.to_s.pluralize : name.to_s end
Instance Attribute Details
#active_record (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/reflection.rb', line 384
attr_reader :active_record
#autosave=(autosave) (writeonly)
[ GitHub ]# File 'activerecord/lib/active_record/reflection.rb', line 399
def autosave=(autosave) @options[:autosave] = autosave parent_reflection = self.parent_reflection if parent_reflection parent_reflection.autosave = autosave end end
#name (readonly)
Returns the name of the macro.
composed_of :balance, class_name: 'Money'
returns :balance
has_many :clients
returns :clients
# File 'activerecord/lib/active_record/reflection.rb', line 374
attr_reader :name
#options (readonly)
Returns the hash of options used for the macro.
composed_of :balance, class_name: 'Money'
returns { class_name: "Money" }
has_many :clients
returns {}
# File 'activerecord/lib/active_record/reflection.rb', line 382
attr_reader :
#plural_name (readonly)
# File 'activerecord/lib/active_record/reflection.rb', line 386
attr_reader :plural_name # :nodoc:
#scope (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/reflection.rb', line 376
attr_reader :scope
Instance Method Details
#==(other_aggregation)
Returns true
if self
and other_aggregation
have the same #name attribute, #active_record attribute, and other_aggregation
has an options hash assigned to it.
# File 'activerecord/lib/active_record/reflection.rb', line 440
def ==(other_aggregation) super || other_aggregation.kind_of?(self.class) && name == other_aggregation.name && !other_aggregation. .nil? && active_record == other_aggregation.active_record end
#_klass(class_name)
# File 'activerecord/lib/active_record/reflection.rb', line 426
def _klass(class_name) # :nodoc: if active_record.name.demodulize == class_name return compute_class("::#{class_name}") rescue NameError end compute_class(class_name) end
#compute_class(name)
[ GitHub ]#derive_class_name (private)
[ GitHub ]# File 'activerecord/lib/active_record/reflection.rb', line 453
def derive_class_name name.to_s.camelize end
#klass
Returns the class for the macro.
composed_of :balance, class_name: 'Money'
returns the Money class has_many :clients
returns the Client class
class Company < ActiveRecord::Base
has_many :clients
end
Company.reflect_on_association(:clients).klass
# => Client
Note: Do not call klass.new
or klass.create
to instantiate a new association object. Use build_association
or create_association
instead. This allows plugins to hook into association object creation.
# File 'activerecord/lib/active_record/reflection.rb', line 422
def klass @klass ||= _klass(class_name) end
#normalize_options(options) (private)
[ GitHub ]# File 'activerecord/lib/active_record/reflection.rb', line 457
def ( ) counter_cache = .delete(:counter_cache) if counter_cache active = true case counter_cache when String, Symbol column = -counter_cache.to_s when Hash active = counter_cache.fetch(:active, true) column = counter_cache[:column]&.to_s end [:counter_cache] = { active: active, column: column } end end
#scope_for(relation, owner = nil)
[ GitHub ]# File 'activerecord/lib/active_record/reflection.rb', line 448
def scope_for(relation, owner = nil) relation.instance_exec(owner, &scope) || relation end