2011-03-26 18 views
0

我发现了一个奇怪的错误,当我尝试当我运行耙路线链接到show_members行动Rails的路线错误的故障排除

Routing Error 
No route matches "/groups/1/show_members" 

#routes.rb 
get 'groups/:id/members' => 'groups#show_members' 

#groups_controller.rb 
def show_members 

我得到这个:

#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: 但我希望show_members动作要做的就是显示该组中的所有用户。我希望用户功能和路径保持不变。现在,show_members动作路由到组,与show相同。在我的组控制器中,我将默认显示组操作分为三个页面,一个显示组配置文件,一个显示show_members组中的成员,另一个显示新闻页面,当显示新闻时将显示show_news我明白了。

#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){:控制器=> “用户/注册”,:动作=> “新”} edit_user_group_registration GET /用户/组/ :group_id/edit(。:format){:controller =>“users/registrations”,:action =>“edit”} user_group_registration PUT /users/groups/:group_id(.:format){:controller =>“users /注册“,:动作=>”更新“} 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”,:动作=>“新”} edit_group GET /groups/:id/edit(.:format){:controller =>“groups”,:action =>“edit”} group GET/groups /:id(.:格式){:controller =>“groups”,:action =>“show”} group PUT /groups/:id(.:format){:controller =>“groups”,:action =>“u PDATE “} 组中删除/groups/:id(.:format){:控制器=>” 组”,:动作=> “消灭”}

#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 
+0

尼克的答案是正确的它修复您的问题,但你采取的做法不好,你应该有不同的模型,视图和合作为团体和用户提供消息。观看这个railscast http://railscasts.com/episodes/139。尽管您正在使用的导轨2和导轨3之间的路由语法已更改,但其他所有内容都是相同的。 – mark 2011-03-26 14:49:44

回答

2

Rails是正确的,当它说,没有路由匹配/groups/1/show_members - 你routes.rb创造这样的事情/groups/1/members路线(不带“show_”)

你需要改变routes.rb到看起来像:

get 'groups/:id/show_members` => 'groups#show_members' 
+0

真棒。我完全这样做,我总是尽量不要。谢谢! – illogikal 2011-03-26 14:38:49

0

那么这个问题当然是你没有做一切正确。

resources :groups do |group| 
    group.resources :members 
end 

link_to @member.name, [@group, @member] 

魔法。

现在阅读指南将是一个非常好的主意。

http://guides.rubyonrails.org/routing.html