2012-11-19 2 views
0

Я получаю эту странную странную ошибку маршрутизации, когда я нажимаю кнопку «Создать участника». Ясно, что я неправильно понимаю, как работают маршруты. Если бы вы могли уточнить, что было бы оценено!Сложные рельсы 3 Вложенный маршрут

No route matches {:action=>"present_survey", :controller=>"rounds", :program_id=># 
<Program id: 1, name: "JBS 2012", description: "Summer of 2012", open: false, 
locked: true, suppress_hidden_participants: false, created_at: "2012-11-19 22:35:06", 
updated_at: "2012-11-19 22:35:06">, :participant_id=>nil, :round_id=>#<Round id: 9, 
program_id: 1, number: 8, start: 86, fin: 95, status: nil, open: true, open_date: nil, 
created_at: "2012-11-19 22:35:07", updated_at: "2012-11-19 22:35:07">} 

Вот соответствующий routes.rb линия:

new_program_participant GET /programs/:program_id/participants/new(.:format) participants#new 

Вот соответствующие контроллеры линии:

class ParticipantsController < ApplicationController 
    respond_to :html 
    def index 
    @program_id = params[:program_id] 
    @program = Program.find(@program_id) 
    @participants = @program.participants.paginate(page: params[:page]) 
    respond_with @participants do |format| 
     format.html { 
     render layout: 'layouts/progtabs' 
     } 
    end 
    end 

Вот соответствующий вид линии:

<%= link_to "Create a new Participant", new_program_participant_path(@program_id) %> 

Вот url, который генерирует d:

http://0.0.0.0:3000/programs/1/participants/new 

отредактировал оригинальный плакат:

В ответ на вопросы и комментарии ниже:

  • Ссылка появляется на главной странице, и предполагается, что взять меня к указанный URL, поэтому ссылка кажется мне верной.
  • Вы можете увидеть в routes.rb ниже, чем на самом деле я это действие называется present_survey, но я не могу понять, почему он находится в игре

Здесь все маршруты файл:

root to: 'programs#index' 
    resources :programs do 
    resources :participants do 
     resources :rounds do 
     get 'survey' => 'rounds#present_survey' 
     put 'survey' => 'rounds#store_survey' 
     end 
    end 
    resources :questions 
    resources :rounds 
    member do 
     get 'report' => 'reports#report' 
    end 
    end 

И, наконец, вот полный выход из рек маршрутов:

root  /                     programs#index 
program_participant_round_survey GET /programs/:program_id/participants/:participant_id/rounds/:round_id/survey(.:format) rounds#present_survey 
           PUT /programs/:program_id/participants/:participant_id/rounds/:round_id/survey(.:format) rounds#store_survey 
     program_participant_rounds GET /programs/:program_id/participants/:participant_id/rounds(.:format)     rounds#index 
           POST /programs/:program_id/participants/:participant_id/rounds(.:format)     rounds#create 
    new_program_participant_round GET /programs/:program_id/participants/:participant_id/rounds/new(.:format)    rounds#new 
    edit_program_participant_round GET /programs/:program_id/participants/:participant_id/rounds/:id/edit(.:format)   rounds#edit 
     program_participant_round GET /programs/:program_id/participants/:participant_id/rounds/:id(.:format)    rounds#show 
           PUT /programs/:program_id/participants/:participant_id/rounds/:id(.:format)    rounds#update 
           DELETE /programs/:program_id/participants/:participant_id/rounds/:id(.:format)    rounds#destroy 
      program_participants GET /programs/:program_id/participants(.:format)           participants#index 
           POST /programs/:program_id/participants(.:format)           participants#create 
     new_program_participant GET /programs/:program_id/participants/new(.:format)          participants#new 
     edit_program_participant GET /programs/:program_id/participants/:id/edit(.:format)        participants#edit 
      program_participant GET /programs/:program_id/participants/:id(.:format)          participants#show 
           PUT /programs/:program_id/participants/:id(.:format)          participants#update 
           DELETE /programs/:program_id/participants/:id(.:format)          participants#destroy 
       program_questions GET /programs/:program_id/questions(.:format)           questions#index 
           POST /programs/:program_id/questions(.:format)           questions#create 
      new_program_question GET /programs/:program_id/questions/new(.:format)          questions#new 
      edit_program_question GET /programs/:program_id/questions/:id/edit(.:format)         questions#edit 
       program_question GET /programs/:program_id/questions/:id(.:format)          questions#show 
           PUT /programs/:program_id/questions/:id(.:format)          questions#update 
           DELETE /programs/:program_id/questions/:id(.:format)          questions#destroy 
        program_rounds GET /programs/:program_id/rounds(.:format)            rounds#index 
           POST /programs/:program_id/rounds(.:format)            rounds#create 
       new_program_round GET /programs/:program_id/rounds/new(.:format)           rounds#new 
       edit_program_round GET /programs/:program_id/rounds/:id/edit(.:format)          rounds#edit 
        program_round GET /programs/:program_id/rounds/:id(.:format)           rounds#show 
           PUT /programs/:program_id/rounds/:id(.:format)           rounds#update 
           DELETE /programs/:program_id/rounds/:id(.:format)           rounds#destroy 
        report_program GET /programs/:id/report(.:format)              reports#report 
         programs GET /programs(.:format)                 programs#index 
           POST /programs(.:format)                 programs#create 
        new_program GET /programs/new(.:format)                programs#new 
        edit_program GET /programs/:id/edit(.:format)               programs#edit 
         program GET /programs/:id(.:format)                programs#show 
           PUT /programs/:id(.:format)                programs#update 
           DELETE /programs/:id(.:format)                programs#destroy 

больше правок по OP

def new 
    @program = Program.find(params[:program_id]) 
    @participant = @program.participants.new 
    respond_with @participant do |format| 
     format.html { 
     render layout: 'layouts/progtabs' 
     } 
    end 
    end 
+0

Не могли бы вы добавить соответствующую строку вашего файла маршрутов. –

+0

Вы вызываете 'new_program_patricipant_path', который будет использовать новый метод (а не метод индекса, который вы укажете в своем вопросе). Можете ли вы показать свой новый метод 'StudentsController'? Сообщение об ошибке смотрит на совершенно другой контроллер и действие, что заставляет меня думать, что новый метод имеет в себе перенаправление? – joofsh

+0

@joofsh: Я добавил некоторую информацию выше, включая весь файл routes.rb. Может быть, вы видите, что я не понимаю? Благодаря! – pitosalas

ответ

1

Маршрут ищет действие «present_survey», которое сопоставляется методу в AccountController. нет маршрута матчей {: действие => «present_survey» ......}

Там нет метода с именем present_survey в ParticipantsController

Выполнить команду «реки маршрутов», чтобы получить список всех маршрутов в порядке ,

Ваш URL-адрес ищет новый метод в UsersController, у вас его есть?

new_program_participant GET /programs/:program_id/participants/new(.:format) участников # новый

0

Благодарности к @joofsh я понял мою проблему. Действительно, «новый участник» форма запущен новый метод на ParticipantController включены:

link_to("Current survey form", program_participant_round_survey_path(prog, part.guid, round)) 

и для нового Участника part.guid был равен нулю.

Урок. Вы также можете получить ошибку маршрутизации, когда вы запрашиваете Rails для создания пути для вас, а не только в том случае, когда вы буквально отправляете маршрут.

Смежные вопросы