Route_for and nested resources

I can’t figure out how to make the updates to allow for the route_form
method to return a url that matches the expected.

Here is a sample
route_for(:controller => :task, :action => :new).should == “/task/new”

If a task has to be created for a user, how exactly do I do this. The
following doesn’t work:
route_for(:controller => :task, :action => :new, :user_id => 1).should
== “/users/1/task/new” (fails)
route_for(:controller => :task, :action => :new, :user_id => 1).should
== “/task/new?user_id=1” (passes)

Or do you just use:
new_user_task(1,1).should == “/users/1/task/new”

I haven’t been able to find that much documentation on the route_for
method that lists any ways of creating the nested route url.

Thanks.

Chris O. wrote:

I can’t figure out how to make the updates to allow for the route_form
method to return a url that matches the expected.

Sorry to bump such an old post, but the interweb doesn’t really show
anything for routing specs when it comes to nested resources. I just
find this unanswered post repeatedly.

Does anyone know how to work with route_for() when it comes to nested
resources?

On Jan 27, 2008 6:27 PM, Matt D. [email protected] wrote:

resources?
I think I answered that in my response to the OP. Write back if not.

On Nov 21, 2007 3:10 PM, Chris O. [email protected] wrote:

route_for(:controller => :task, :action => :new, :user_id => 1).should
== “/task/new?user_id=1” (passes)

Or do you just use:
new_user_task(1,1).should == “/users/1/task/new”

I haven’t been able to find that much documentation on the route_for
method that lists any ways of creating the nested route url.

It uses ActionController::Routing::Routes.generate, which is equally
un-documented :frowning:

You’ve got a singular task controller (instead of tasks), so I’m not
sure how that’s affecting things. I can tell you that if you do this:

route_for(:controller => ‘tasks’, :action => ‘new’, :user_id =>
‘2’).should == ‘/users/2/tasks/new’

It will pass when your routes.rb has this:

map.resources :users do |users|
users.resources :tasks
end

Give that a whirl.

Cheers,
David

On Jan 27, 2008, at 8:05 PM, David C. wrote:

The

‘2’).should == ‘/users/2/tasks/new’
David
Thanks for the further explanation David! I could’ve sworn that I
tried this, but sure enough, it works like a charm.

Thanks!

Matt D., M.S.
IT Manager / Lead Web D.

Dynamix Engineering Ltd.
1108 City Park Ave.
Columbus, OH 43206
Cell: (614) 403-5289

Note, named routes cannot be accessed unless you have a response (eg
after you’ve run a controller action)
See Lighthouse - Beautifully Simple Issue Tracking
named-urls-before-response

On Jan 27, 2008 7:47 PM, Jonathan L. [email protected]
wrote:

Note, named routes cannot be accessed unless you have a response (eg after
you’ve run a controller action)
See
Lighthouse - Beautifully Simple Issue Tracking

Since you bring it up - any ideas on how to make that happen?