Polymorphic associations on models with many names


I’ve got Itineraries, Stops (join model), and Locations. I’d like to
be able to do Itinerary.locations.find_by_name(:name) but Locations
can have one of several types (Museum, Restaurant, Bar, Train Station,
etc) and each one of those can have several names referring to the
same instance (“Manny’s Bar”, “Manny’s”, “The Bar Formerly Known as
Manny’s”, “The New Roadhouse”).

Is there a way to make it work? How do I find_by_name when I don’t
know which type of model the name refers to?


class Itineraries
has_many :stops
has_many :locations, :through => :stops

class Stops
belongs_to :itineraries
belongs_to :locations

class Locations
has_many :stops
has_many :itineraries, :through => :stops
belongs_to :locationable, :polymorphic => true

class Museum
has_one :location, :as => :locationable

class Bar
has_one :location, :as => :locationable