Better way to generate urls such as /:state/:city/:id without having to explicitly set :state and :c

Hi all -

Here’s my situation. We have a model Foo. All is well. Time for
some SEO which gives us this as a route/url:

/foos/:id -> /foos/123-acme-foo

Easy to do by defining Foo.to_param. All is well. Time for some more
SEO with this route/url:

/foos/:state/:city/:id -> /foos/wa/olympia/123-acme-foo

And now I lose the convenience of being able to do:

<%= link_to ‘click’, foo_path(@foo) %>

As it no longer recognizes the route. So I’ve resorted to defining a
Foo.url_params which returns a hash containing the appropriate values
and then do this:

<%= link_to ‘click’, foo_path(@foo.url_params) %>

It works, but I’m annoyed.

I guess what I’m kind of looking for is a to_params() method which if
it exists will be used instead of to_param().

Or is there another way that will let me get back to doing
foo_path(@foo) and have the route match?

Thanks all!