Module: BelongsToPolymorphic::Associations::ClassMethods

Defined in:
lib/belongs_to_polymorphic/associations.rb

Instance Method Summary collapse

Instance Method Details

#belongs_to_polymorphic(name, **options) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/belongs_to_polymorphic/associations.rb', line 14

def belongs_to_polymorphic(name, **options)
  default_belongs_to name, **options
  polymorphic = options[:polymorphic]

  return unless polymorphic.present? && polymorphic.class != TrueClass

  allowed_classes = classify(polymorphic)

  validates "#{name}_type", inclusion: {
    in: inclusion_classes(allowed_classes, options[:optional]),
    message: I18n.t('belongs_to_polymorphic.errors.messages.class_not_allowed',
                    class: '%<value>s')
  }

  define_singleton_method("#{name}_types") { allowed_classes }
  define_generic_finder_method(name)
  define_scopes_and_instance_methods(name, allowed_classes)
end