Adrian1
(Adrian)
January 26, 2009, 11:08am
1
Hi All
I'm having some issues with the following routes problem.
The routes.rb file ...
map.resources :users
map.connect '/users/view_payments/:user_id', :controller =>
'users', :action => 'view_payments'
The users_controller.rb file ...
def view_payments
@user = User.find[:params[:user_id]]
@payments = @user.payments
end
The routes list from a rake routes ...
/users/view_payments/:user_id
{:controller=>"users", :action=>"view_payments"}
The .../views/users/view_payments.html.erb file ...
<%= link_to 'View Payments', :controller => 'users', :action =>
'view_payments', :user_id => @user.id %>
Then the URL generated from the link_to ...
http://localhost:3000/users/view_payments/2
But this returns a 404 error
Any help/ideas appreciated
Cheers
Adrian
Firstly have you restarted the server, this has bitten me more than a few times.
Otherwise try putting the more specific route first in the routes file.
radar
(Ryan Bigg)
January 26, 2009, 12:42pm
3
You need to define a member resource on the map.resources :users. For
more information see the guide on routing on http://guides.rubyonrails.org
try
map.resources :users, :member => {:view_payments => :get}
should work.
Jeff1
(Jeff)
January 26, 2009, 3:11pm
5
As others have said, you just need to define the custom action in your
routes.
But I might suggest a more restful approach:
map.resources :users, :has_many => :payments
Then you can use links like
http://localhost:3000/users/2/payments
This calls the index action of a Payments controller. You can look at
params[:user_id] to know which user is involved. This way you don't
need any custom actions.
Just a thought.
Jeff
switchingtorails.com
Adrian1
(Adrian)
January 26, 2009, 10:13pm
6
Thanks to all who responded.
I decided to go with the more RESTful approach:
map.resources :users, :has_many => :payments
and use the index action on the payments controller.
Cheers
Adrian