модуль ActiveRecord::Reflection::ClassMethods
Рефлексия позволяет получать информацию о классах и объектах Active Record, включая их ассоциации и агрегации. Эта информация, например, может использоваться в генераторе форм, который принимает объект Active Record и создаёт поля ввода для всех атрибутов в зависимости от их типа, а также отображает ассоциации с другими объектами.
Класс MacroReflection содержит информацию для классов AggregateReflection и AssociationReflection.
Публичные методы экземпляра
# File activerecord/lib/active_record/reflection.rb, line 61 def reflect_on_aggregation(aggregation) aggregate_reflections[aggregation.to_s] end
Возвращает объект AggregateReflection для заданной агрегации (используйте символ).
Account.reflect_on_aggregation(:balance) # => the balance AggregateReflection
# File activerecord/lib/active_record/reflection.rb, line 53 def reflect_on_all_aggregations aggregate_reflections.values end
Возвращает массив объектов AggregateReflection для всех агрегаций в классе.
# File activerecord/lib/active_record/reflection.rb, line 99
def reflect_on_all_associations(macro = nil)
association_reflections = reflections.values
macro ? association_reflections.select { |reflection| reflection.macro == macro } : association_reflections
end Возвращает массив объектов AssociationReflection для всех ассоциаций в классе. Если вы хотите отразить только определённый тип ассоциации, передайте символ (:has_one, :has_many, :belongs_to) в качестве первого параметра.
Пример:
Account.reflect_on_all_associations # returns an array of all associations Account.reflect_on_all_associations(:has_many) # returns an array of all has_many associations @api public
# File activerecord/lib/active_record/reflection.rb, line 122
def reflect_on_all_autosave_associations
reflections.values.select { |reflection| reflection.options[:autosave] }
end Возвращает массив объектов AssociationReflection для всех ассоциаций, у которых автоматическое сохранение включено.
@api public
# File activerecord/lib/active_record/reflection.rb, line 110 def reflect_on_association(association) reflections[association.to_s] end
Возвращает объект AssociationReflection для заданной ассоциации (используйте символ).
Account.reflect_on_association(:owner) # returns the owner AssociationReflection Invoice.reflect_on_association(:line_items).macro # returns :has_many @api public
# File activerecord/lib/active_record/reflection.rb, line 70
def reflections
@__reflections ||= begin
ref = {}
_reflections.each do |name, reflection|
parent_name, parent_reflection = reflection.parent_reflection
if parent_name
ref[parent_name] = parent_reflection
else
ref[name] = reflection
end
end
ref
end
end Возвращает словарь, где ключом является имя рефлексии, а значением — объект AssociationReflection.
Account.reflections # => {"balance" => AggregateReflection}
@api public
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.