adrian
January 26, 2009, 12:09pm
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
adrian
January 26, 2009, 12:40pm
2
On Mon, Jan 26, 2009 at 1:08 PM, Adrian [email protected]
wrote:
The users_controller.rb file …
<%= link_to ‘View Payments’, :controller => ‘users’, :action =>
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.
–
Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake
“I have never let my schooling interfere with my education” - Mark Twain
adrian
January 26, 2009, 1:43pm
3
You need to define a member resource on the map.resources :users. For
more information see the guide on routing on
Ruby on Rails Guides
adrian
January 26, 2009, 2:03pm
4
try
map.resources :users, :member => {:view_payments => :get}
should work.
adrian
January 26, 2009, 4:12pm
5
On Jan 26, 5:08 am, Adrian [email protected] wrote:
def view_payments
‘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
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
adrian
January 26, 2009, 11:14pm
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