Module: Polymorpheus::Interface::HasManyAsPolymorph

Defined in:
lib/polymorpheus/interface/has_many_as_polymorph.rb

Instance Method Summary collapse

Instance Method Details

#has_many_as_polymorph(association, scope = nil, options = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/polymorpheus/interface/has_many_as_polymorph.rb', line 4

def has_many_as_polymorph(association, scope = nil, options = {})
  if scope.instance_of?(Hash)
    options = scope
    scope = nil
  end

  options.symbolize_keys!
  fkey = name.foreign_key

  class_name = options[:class_name] || association.to_s.classify

  conditions = proc do
    keys = class_name.constantize
            .const_get('POLYMORPHEUS_ASSOCIATIONS')
            .map(&:foreign_key)
    keys.delete(fkey)

    nil_columns = keys.reduce({}) { |hash, key| hash.merge!(key => nil) }

    relation = where(nil_columns)
    relation = scope.call.merge(relation) unless scope.nil?
    relation
  end

  has_many association, conditions, **options
end