Named Routes parameter errors

Hello all. I have many questions regarding routes:

First of all, I had a route that looked like this: map.connect '/person/:id/ tag/:tag_id', :controller=>:person, :action=>:tag

I was trying to link to this URL with this code: link_to tag.name, :action=>:tag, :id=>@person.id, :tag_id=>tag.id

Instead of generating the URL I desired ( /person/1/tag/2 ), the URL generated slipped through to my default route: /person/tag/1?tag_id=2

Question #1: Why does Rails generate the URL based on a route which is lower in my priority list in routes.rb

When I asked this question in #rubyonrails the response I got was to just use a named route instead. I'm not opposed to this idea but I would still like a real answer to Question 1.

I made a named route: map.with_options :controller=>:person do |c|   c.person_tag 'person/:id/tag/:tag_id', :action=>:tag end

This doesn't even "compile" unless you change :person to a string

Question #2: Why must controllers not be symbols in a named route

Linking to this named route like so: link_to tag.name, person_tag_url(:id=>@person.id, :tag_id=>tag.id) produces an error: person_tag_url failed to generate from {:controller=>"person", :action=>"tag", :tag_id=>"13", :id=>"1"}, expected: {:controller=>"person", :action=>:tag}, diff: {:action=>:tag, :tag_id=>"13", :id=>"1"}

For some reason it doesn't expect my :id and :tag_id, so I'll try to give it what it wants. I change the link to: link_to tag.name, person_tag_url() And get this error: person_tag_url failed to generate from {:controller=>"person", :action=>"tag"}, expected: {:controller=>"person", :action=>:tag}, diff: {:action=>:tag}

Looks like it wants tag to be a symbol. Well, since I didn't explicitly give tag as a string, I'll change what it expects in my route to look like this: map.with_options :controller=>'person' do |c|   c.person_tag 'person/:id/tag/:tag_id', :action=>'tag' end However, now I get the error message: person_tag_url failed to generate from {:controller=>"person", :action=>"tag"} - you may have ambiguous routes, or you may need to supply additional parameters for this route. content_url has the following required parameters: ["person", :id, "tag", :tag_id] - are they all satisifed?

So it looks like I'm passing the parameters it's "expecting" now, but the error message I get now is that additional parameters are required. Supplying those parameters generates the other "failed to generate" error described above.

Question #3: Can anybody point out what I am doing incorrectly?

Thanks!