module BelongsToPolymorphicAssociation

Public Instance Methods

define_accessors(model, reflection) click to toggle source
Calls superclass method
# File lib/polymorphic_aliases/active_record/associations/builder/belongs_to_polymorphic_association.rb, line 13
def define_accessors(model, reflection)
  super

  mixin = model.generated_association_methods

  if reflection.polymorphic? && reflection.options[:types].present?
    define_aliases(mixin, reflection)
  end
end
define_aliases(mixin, reflection) click to toggle source
# File lib/polymorphic_aliases/active_record/associations/builder/belongs_to_polymorphic_association.rb, line 23
    def define_aliases(mixin, reflection)
      types            = reflection.options[:types]
      association_name = reflection.name

      types.each do |type|
        name = type.tableize.tr("/", "_").singularize
        type = type.inspect

        mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
          def #{name}
            if #{type} == self["#{association_name}_type"]
              association(:#{association_name}).reader
            end
          end
          def #{name}=(value)
            if #{type} == self["#{association_name}_type"]
              association(:#{association_name}).writer(value)
            end
          end
          def reload_#{name}
            if #{type} == self["#{association_name}_type"]
              association(:#{association_name}).force_reload_reader
            end
          end
        CODE
      end
    end
valid_options(options) click to toggle source
Calls superclass method
# File lib/polymorphic_aliases/active_record/associations/builder/belongs_to_polymorphic_association.rb, line 7
def valid_options(options)
  valid = super
  valid += [:types] if options[:polymorphic]
  valid
end