定义具有附加标识的自定义路由
问题描述:
我的Team
控制器需要自定义动作list_questions
需要接收额外的编号:exercise_id
。下面是我怎么想这样做:定义具有附加标识的自定义路由
resources :teams do
member do
post :enroll
post :unenroll
get 'exercises/:exercise_id/list_questions'
end
end
不过,我收到以下错误:ArgumentError: Missing :action key on routes definition, please check your routes.
有什么更好的方式来实现这一目标?
答
您正在收到错误,因为该路线的操作未定义。
尝试这样的事情
resources :teams do
member do
post :enroll
post :unenroll
get 'list_questions(/exercises/:exercise_id)',
to: "teams#list_questions",
as: :list_questions
end
end
,你可以建立的网址是这样的:
list_questions_teams_path(@team, @exercise)
答
只想跟着你ressourceful路线接近,如:
resources :teams do
member do
post :enroll
post :unenroll
resources :exercises do
member do
resources :list_questions
end
end
end
end
将产生:
enroll_team POST /teams/:id/enroll(.:format) teams#enroll
unenroll_team POST /teams/:id/unenroll(.:format) teams#unenroll
list_questions GET /teams/:id/exercises/:id/list_questions(.:format) list_questions#index
POST /teams/:id/exercises/:id/list_questions(.:format) list_questions#create
new_list_question GET /teams/:id/exercises/:id/list_questions/new(.:format) list_questions#new
edit_list_question GET /teams/:id/exercises/:id/list_questions/:id/edit(.:format) list_questions#edit
list_question GET /teams/:id/exercises/:id/list_questions/:id(.:format) list_questions#show
PATCH /teams/:id/exercises/:id/list_questions/:id(.:format) list_questions#update
PUT /teams/:id/exercises/:id/list_questions/:id(.:format) list_questions#update
DELETE /teams/:id/exercises/:id/list_questions/:id(.:format) list_questions#destroy
exercises GET /teams/:id/exercises(.:format) exercises#index
POST /teams/:id/exercises(.:format) exercises#create
new_exercise GET /teams/:id/exercises/new(.:format) exercises#new
edit_exercise GET /teams/:id/exercises/:id/edit(.:format) exercises#edit
exercise GET /teams/:id/exercises/:id(.:format) exercises#show
PATCH /teams/:id/exercises/:id(.:format) exercises#update
PUT /teams/:id/exercises/:id(.:format) exercises#update
DELETE /teams/:id/exercises/:id(.:format) exercises#destroy
teams GET /teams(.:format) teams#index
POST /teams(.:format) teams#create
new_team GET /teams/new(.:format) teams#new
edit_team GET /teams/:id/edit(.:format) teams#edit
team GET /teams/:id(.:format) teams#show
PATCH /teams/:id(.:format) teams#update
PUT /teams/:id(.:format) teams#update
DELETE /teams/:id(.:format) teams#destroy
参见http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default
您必须了解'member'和'collection'之间的区别。 “成员”路线将需要一个“ID”,因为它会影响成员。一个“集合”路线并不是因为它作用于一个对象集合 –
Rigth。我的解释是:我仍然需要我的'team_id',所以我把我想要的路线放在我的'团队'资源的'member'块中。 – rwehresmann