routing nested resources

I've noticed that nested resources are also available via the default
route:

In my application I have many gamers and want to give them a singleton
profile resource (example.com/gamers/3/profile). So my config.routes
includes:
  map.resources :gamers, :has_one => [:profile]

Even though it's a singleton, my controller has be pluralized: called
ProfilesController and live at app/controllers/profiles_controller.rb
with views in app/views/profiles.

The problem I see is that the default route also means that the
profiles controller can be accessed at example.com/profiles. Should I
write a before_filter to raise 404 if it can't find params[:gamer_id]?
It seems the natural place to do this would be config/routes, but the
only way to do that would be to remove the default route and
explicitly list all of my other controllers. Is there a nicer way to
do this that I'm missing?

I'm going to be adding several sub-controllers to my gamers
controller; I just gave this as the simplest example. You're right
that it makes sense to store profiles on the gamer objects.

Anyone have a solution for the routing, though?

Hm, it doesn't seem to be testable. I wrote:

  def nested
    puts request.url
    raise ActionController::RoutingError, 'not nested' unless
params[:gamer_id]
  end

And that works fine. But when I try to test an action:

  def test_edit
    alice = gamers(:alice)
    # and any of the following:
    get :show, :gamer => alice
    get :show, :gamer => alice.to_param
    get :show, :gamer_id => alice
    get :show, :gamer_id => alice.to_param
  end

I just get the RoutingError... it says I'm requesting the url
http://test.host/profiles/edit/alice instead of the correct url of
http://test.host/gamers/alice/profile/edit. How do I tell the
functional test to use the more-specific (and earlier in
config.routes!) route instead of the default route?

I'd rather serve a 404 than 301 in this case.