Route generation and clashes

Imagine a movie-rental website. Sensible REST urls might look like this:

/movies/51

...and on the business side: /rentals /customers

To see the rentals for a particular customer or movie: /customers/12/rentals /movies/29/rentals

Unfortunately, adding the last two breaks routing with a cryptic error:   new_movie_url failed to generate from {:controller=>"movies", :action=>"new"}, expected: {:controller=>"movies", :action=>"new"}, diff: {}

Here's the routes.rb:   map.resources :movies do |movies|     movies.resources :rentals   end

  map.resources :customers do |customers|     customers.resources :rentals   end

  map.resources :rentals do |rentals|     rentals.resources :movies   end

The last resource map now makes new_movie_path() expect to receive a Rental id. So, the cheap way to fix this is to always call new_movie_path(1) instead, but it's a bad hack. What's the "right way" to do these kinds of routes?

It also seems like we should have a better error message in place for this kind of scenario. Throwing an exception that says I've passed all of the right parameters is crazy.