class Order < ActiveRecord::Base
  #
  # tutaj nastpuj definicje kojarze
  #

  def payment
    # dla danej klasy ponisza metoda zwraca unikatowy symbol,
    # przekazywany do metody reflect_on_association
    def reflection_symbol(klass)
      klas.to_s.split("::").last.underscore.to_sym
    end

    # dla kadej podklasy danej klasy bazowej ponisza metoda
    # zwraca list zdefiniowanych skojarze
    def association_methods(mti_base_class)
      Object.subclasses_of(mti_base_class).collect{|p|
        assoc = self.class.reflect_on_association(reflection_symbol(p))
        assoc ? assoc.name : nil
      }.compact
    end

    # wywoywanie kolejno poszczeglnych metod skojarzeniowych 
    # a do napotkania takiej, ktra zwrci niepusty wynik
    association_methods(Payment).collect{|a|
      self.send a
    }.inject do |a, b|
      a || b
    end
  end
end
