Ein Array, das Objekte unterschiedlicher Modelle enthält, kann man mithilfe ihres Antwortverhaltens separieren – vorausgesetzt, sie reagieren auf unterschiedliche Methoden:
@projects = results.select {|s| s.respond_to?(:project)}.map(&:project)
@people = results.select {|s| s.respond_to?(:name)}
Im Falle der @projects sind die zu sammelnden Projekte über einen Proxy an die result-Mitglieder gebunden.
Besser:
Eine ebenso einfache wie genaue Möglichkeit ist die, den Klassennamen abzufragen:
@people = results.select {|s| s.class.name == "Person"}