module Polymorpheus::Interface::HasManyAsPolymorph

Public Instance Methods

has_many_as_polymorph(association, options = {}) click to toggle source
# File lib/polymorpheus/interface/rails3/has_many_as_polymorph.rb, line 4
def has_many_as_polymorph(association, options = {})
  options.symbolize_keys!
  fkey = name.foreign_key

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

  options[: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) }

    if self.is_a?(ActiveRecord::Associations::JoinDependency::JoinAssociation)
      { aliased_table_name => nil_columns }
    else
      { association => nil_columns }
    end
  end

  has_many association, options
end