Spec-Zone.ru › Ruby on Rails 4.2

модуль ActiveRecord::Reflection::ClassMethods

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

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

Публичные методы экземпляра

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

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

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

Spec-Zone.ru

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