module ActiveRecord::Reflection::ClassMethods
Active Record
Рефлексия позволяет изучать связи и агрегаты классов и объектов Active Record. Эта информация, например, может использоваться построителем форм, который принимает объект Active Record, создаёт поля ввода для всех атрибутов в зависимости от их типа и отображает связи с другими объектами.
Класс MacroReflection содержит сведения для классов AggregateReflection и AssociationReflection.
Открытые методы экземпляра
# File activerecord/lib/active_record/reflection.rb, line 70 def reflect_on_aggregation(aggregation) aggregate_reflections[aggregation.to_sym] end
Возвращает объект AggregateReflection для агрегата с именем aggregation (используйте символ).
Account.reflect_on_aggregation(:balance) # => the balance AggregateReflection
# File activerecord/lib/active_record/reflection.rb, line 62 def reflect_on_all_aggregations aggregate_reflections.values end
Возвращает массив объектов AggregateReflection для всех агрегатов класса.
# File activerecord/lib/active_record/reflection.rb, line 111
def reflect_on_all_associations(macro = nil)
association_reflections = normalized_reflections.values
association_reflections.select! { |reflection| reflection.macro == macro } if macro
association_reflections
end Возвращает массив объектов AssociationReflection для всех связей класса. Если нужно получить сведения только о связях определённого типа, передайте первым параметром символ (:has_many, :has_one, :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
# File activerecord/lib/active_record/reflection.rb, line 131
def reflect_on_all_autosave_associations
reflections = normalized_reflections.values
reflections.select! { |reflection| reflection.options[:autosave] }
reflections
end Возвращает массив объектов AssociationReflection для всех связей, у которых включён параметр :autosave.
# File activerecord/lib/active_record/reflection.rb, line 122 def reflect_on_association(association) normalized_reflections[association.to_sym] end
Возвращает объект AssociationReflection для связи association (используйте символ).
Account.reflect_on_association(:owner) # returns the owner AssociationReflection Invoice.reflect_on_association(:line_items).macro # returns :has_many
# File activerecord/lib/active_record/reflection.rb, line 78 def reflections normalized_reflections.stringify_keys end
Возвращает Hash, где ключом является имя рефлексии, а значением — AssociationReflection.
Account.reflections # => {"balance" => AggregateReflection}
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.