Spec-Zone.ru › Ruby on Rails 8.1

module ActiveRecord::Reflection::ClassMethods

Active Record

Рефлексия позволяет изучать связи и агрегаты классов и объектов Active Record. Эта информация, например, может использоваться построителем форм, который принимает объект Active Record, создаёт поля ввода для всех атрибутов в зависимости от их типа и отображает связи с другими объектами.

Класс MacroReflection содержит сведения для классов AggregateReflection и AssociationReflection.

Открытые методы экземпляра

reflect_on_aggregation (aggregation) Показать исходный код
# 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
reflect_on_all_aggregations () Показать исходный код
# File activerecord/lib/active_record/reflection.rb, line 62
def reflect_on_all_aggregations
  aggregate_reflections.values
end

Возвращает массив объектов AggregateReflection для всех агрегатов класса.

reflect_on_all_associations (macro = nil) Показать исходный код
# 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
reflect_on_all_autosave_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.

reflect_on_association (association) Показать исходный код
# 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
reflections () Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API