class ActiveRecord::Reflection::MacroReflection
AggregateReflection and AssociationReflection are returned by the Reflection::ClassMethods.
Base class for AggregateReflection and AssociationReflection. Objects of
def ==(other_aggregation)
Returns +true+ if +self+ and +other_aggregation+ have the same +name+ attribute, +active_record+ attribute,
def ==(other_aggregation) super || other_aggregation.kind_of?(self.class) && name == other_aggregation.name && !other_aggregation.options.nil? && active_record == other_aggregation.active_record end
def _klass(class_name) # :nodoc:
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
def autosave=(autosave)
def autosave=(autosave) @options[:autosave] = autosave parent_reflection = self.parent_reflection if parent_reflection parent_reflection.autosave = autosave end end
def compute_class(name)
def compute_class(name) name.constantize end
def derive_class_name
def derive_class_name name.to_s.camelize end
def initialize(name, scope, options, active_record)
def initialize(name, scope, options, active_record) super() @name = name @scope = scope @options = normalize_options(options) @active_record = active_record @klass = options[:anonymous_class] @plural_name = active_record.pluralize_table_names ? name.to_s.pluralize : name.to_s end
def klass
a new association object. Use +build_association+ or +create_association+
Note: Do not call +klass.new+ or +klass.create+ to instantiate
# => Client
Company.reflect_on_association(:clients).klass
end
has_many :clients
class Company < ActiveRecord::Base
has_many :clients returns the Client class
composed_of :balance, class_name: 'Money' returns the Money class
Returns the class for the macro.
def klass @klass ||= _klass(class_name) end
def normalize_options(options)
def normalize_options(options) counter_cache = options.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 options[:counter_cache] = { active: active, column: column } end options end
def scope_for(relation, owner = nil)
def scope_for(relation, owner = nil) relation.instance_exec(owner, &scope) || relation end