Устранение ошибок на маршрутах Rails - PullRequest
0 голосов
/ 26 марта 2011

Я получаю странную ошибку, когда пытаюсь связать с действием show_members

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 group по умолчанию на три страницы, одну для профиля группы, которая является 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) {: controller => "users / registrations",: action => "new"} edit_user_group_registration GET /users/groups/:group_id/edit(.:format) {: controller => "пользователи / регистрации",: action => "edit"} PUT user_group_registration /users/groups/:group_id(.:format) {: controller => "пользователи / регистрации",: action => "update"} user_group_registration DELETE /users/groups/:group_id(.:format) {: controller => «пользователи / регистрации»,: action => «уничтожить»} user_group_confirmation POST /users/groups/:group_id/confirmation(.:format) {: controller => "разработка / подтверждение",: action => "create"} new_user_group_confirmation GET /users/groups/:group_id/confirmation/new(.:format) {: controller => "разработка / подтверждения",: action => "new"} user_group_confirmation GET /users/groups/:group_id/confirmation(.:format) {: controller => "разработка / подтверждение",: action => "show"} groups GET /groups(.:format) {: controller => "groups",: action => "index"} 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"} 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

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Rails корректен, когда говорится, что ни один маршрут не соответствует /groups/1/show_members - ваш routes.rb создает маршрут для чего-то вроде /groups/1/members (без "show_")

Вам нужно изменить routes.rb, чтобы он выглядел как:

get 'groups/:id/show_members` => 'groups#show_members'
0 голосов
/ 26 марта 2011

Ну, проблема, конечно, в том, что вы не все сделали правильно.

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

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

Magic.

Теперь чтение руководства было бы очень хорошей идеей.

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

...