Rails:子路由。没有路线匹配

时间:2017-09-01 11:01:05

标签: ruby-on-rails routing

我有自定义CRUD路由,例如 - 对于个人资料

get '/profiles', to: 'profiles#index'
  get '/profiles/new', to: 'profiles#new', :as => 'new_profile'
  post '/profiles', to: 'profiles#create'
  get '/profiles/edit/:id', to: 'profiles#edit', :as => 'profile'
  patch '/profiles/edit/:id', to: 'profiles#update'
  get '/profiles/get_profiles', to: 'profiles#get_profiles'

没关系。但我对配置文件技能做了相同的路由,这与配置文件的关系。 ProfileSkills的路线如下所示

get '/profiles/:profile_id/profile_skills', to: 'profile_skills#index'
  get '/profiles/:profile_id/profile_skills/new', to: 'profile_skills#new', :as => 'new_profile_skill'
  post '/profiles/:profile_id/profile_skills', to: 'profile_skills#create'
  get '/profiles/:profile_id/profile_skills//edit/:id', to: 'profile_skills#edit', :as => 'profile_skills'
  patch '/profiles/:profile_id/profile_skills/edit/:id', to: 'profiles#update'

当我在创建新项目的路线下

http://localhost:3000/profiles/1/profile_skills/new

抛出异常

No route matches {:action=>"edit", :controller=>"profile_skills", :profile_id=>"1"}, missing required keys: [:id]

在线上

的表格上
  <%= form_for @profile_skill do |form| %>

为什么他不理解我处于'新'路线并且它正在寻找'编辑',当我在'新'之下? 这个问题只有在我在子路线上时才会出现。以“Porfile”路线为例,如果工作正常。

1 个答案:

答案 0 :(得分:1)

在您的路线中使用此

resources :profiles do
  resources :profile_skills
end

这将为您提供这样的路线

profiles/:profile_id/profile_skill指向profile_skill的index行为    profiles/:profile_id/profile_skill/new指向了profile_skill的new行为 profiles/:profile_id/profile_skill/:profile_skill_id指向了profile_skill的show行为 profiles/:profile_id/profile_skill/:profile_skill_id/edit指向了profile_skill的edit行为

等等。

要获得更多帮助,请访问Rails Routing