Reputation: 158
I'm getting a weird error when I try to link to the show_members action
Routing Error
No route matches "/groups/1/show_members"
#routes.rb
get 'groups/:id/members' => 'groups#show_members'
#groups_controller.rb
def show_members
When I run rake routes I get this:
#rake routes
groups GET /groups(.:format) {:controller=>"groups", :action=>"index"}
groups POST /groups(.:format) {:controller=>"groups", :action=>"create"}
new_group GET /groups/new(.:format) {:controller=>"groups", :action=>"new"}
edit_group GET /groups/:id/edit(.:format) {:controller=>"groups", :action=>"edit"}
group GET /groups/:id(.:format) {:controller=>"groups", :action=>"show"}
group PUT /groups/:id(.:format) {:controller=>"groups", :action=>"update"}
group DELETE /groups/:id(.:format) {:controller=>"groups", :action=>"destroy"}
group_join GET /groups/join(.:format) {:controller=>"groups", :action=>"join"}
group_remove_user PUT /groups/remove_user(.:format){:controller=>"groups", :action=>"remove_user"}
GET /groups/:id/members(.:format){:controller=>"groups", :action=>"show_members"}
UPDATE: But all I want the show_members action to do is show all the users within that group. I want the user functionality and paths to remain the same. And now the show_members action routes to group, the same as show. In my groups controller, I split the default show group action into three pages, one for the group profile which is show, one for the members in that group which goes to show_members, and one for the news page, which will go to show_news when i get to it.
#groups_controller.rb
def show_members
@group = Group.find(params[:id])
@members = @group.users
@group_admin = User.find(@group.group_admin)
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @group }
end
end
#rake routes
group_join GET /groups/:group_id/join(.:format) {:controller=>"groups", :action=>"join"}
group_remove_user PUT /groups/:group_id/remove_user(.:format) {:controller=>"groups", :action=>"remove_user"}
group GET /groups/:group_id/:id/members(.:format) {:controller=>"groups", :action=>"show_members"}
group_users GET /groups/:group_id/users(.:format) {:controller=>"users", :action=>"index"}
group_user GET /groups/:group_id/users/:id(.:format) {:controller=>"users", :action=>"show"}
I WANT THIS new_user_session GET /users/sign_in(.:format) {:controller=>"devise/sessions", :action=>"new"}
INSTEAD OF THIS new_user_group_session GET /users/groups/:group_id/sign_in(.:format) {:controller=>"devise/sessions", :action=>"new"}
user_group_session POST /users/groups/:group_id/sign_in(.:format) {:controller=>"devise/sessions", :action=>"create"}
destroy_user_group_session GET /users/groups/:group_id/sign_out(.:format) {:controller=>"devise/sessions", :action=>"destroy"}
user_group_password POST /users/groups/:group_id/password(.:format) {:controller=>"devise/passwords", :action=>"create"}
new_user_group_password GET /users/groups/:group_id/password/new(.:format) {:controller=>"devise/passwords", :action=>"new"}
edit_user_group_password GET /users/groups/:group_id/password/edit(.:format) {:controller=>"devise/passwords", :action=>"edit"}
user_group_password PUT /users/groups/:group_id/password(.:format) {:controller=>"devise/passwords", :action=>"update"}
user_group_registration POST /users/groups/:group_id(.:format) {:controller=>"users/registrations", :action=>"create"}
new_user_group_registration GET /users/groups/:group_id/sign_up(.:format) {:controller=>"users/registrations", :action=>"new"} edit_user_group_registration GET /users/groups/:group_id/edit(.:format) {:controller=>"users/registrations", :action=>"edit"} user_group_registration PUT /users/groups/:group_id(.:format) {:controller=>"users/registrations", :action=>"update"} user_group_registration DELETE /users/groups/:group_id(.:format) {:controller=>"users/registrations", :action=>"destroy"} user_group_confirmation POST /users/groups/:group_id/confirmation(.:format) {:controller=>"devise/confirmations", :action=>"create"} new_user_group_confirmation GET /users/groups/:group_id/confirmation/new(.:format) {:controller=>"devise/confirmations", :action=>"new"} user_group_confirmation GET /users/groups/:group_id/confirmation(.:format) {:controller=>"devise/confirmations", :action=>"show"} groups GET /groups(.:format) {:controller=>"groups", :action=>"index"} groups POST /groups(.:format) {:controller=>"groups", :action=>"create"} new_group GET /groups/new(.:format) {:controller=>"groups", :action=>"new"} edit_group GET /groups/:id/edit(.:format) {:controller=>"groups", :action=>"edit"} group GET /groups/:id(.:format) {:controller=>"groups", :action=>"show"} group PUT /groups/:id(.:format) {:controller=>"groups", :action=>"update"} group DELETE /groups/:id(.:format) {:controller=>"groups", :action=>"destroy"}
#routes.rb
resources :groups do
get 'join' => 'groups#join'
put 'remove_user' => 'groups#remove_user'
get ':id/members' => 'groups#show_members'
resources :users, :only => [:index, :show]
devise_for :users, :controllers => { :registrations => "users/registrations" }
end
Upvotes: 0
Views: 771
Reputation: 5437
Rails is correct when it says that no route matches /groups/1/show_members
- your routes.rb
is creating a route for something like /groups/1/members
(without the "show_
")
You'll need to change routes.rb
to look like:
get 'groups/:id/show_members` => 'groups#show_members'
Upvotes: 2
Reputation: 10564
Well the problem is of course you haven't done everything right.
resources :groups do |group|
group.resources :members
end
link_to @member.name, [@group, @member]
Magic.
Now reading the guide would be a very good idea.
http://guides.rubyonrails.org/routing.html
Upvotes: 0