I have a situation similar to that described on http://wiki.rubyonrails.org/rails/pages/HowToUseManyToManyAgainstASingleTable On that page, someone made the comment: One might argue also that this is contrived, and you should create a real Edge class. This way when you finally realise ?whoops, I need to colour the edges of the graph?, you have somewhere to store that property. Which sounds like exactly what I want. Are there any good examples of how to do this? Cheers, Ketil