Rails试图创建嵌套路由

时间:2013-01-29 03:36:55

标签: ruby-on-rails ruby ruby-on-rails-3 routing

好的,我正在拍摄这样的网址/applications/:application_id/jobseekers/new。我知道如果我生成2个脚手架(应用程序和求职者),我可以通过这样做来使路线工作:

resources :applications do
  resources :jobseekers
end

但我不需要为求职者提供完整的脚手架。我只需要一个新的创建方法。

我如何编写我的路线,以便求职者#new和求职者#create方法有效?

我试过

resources :applications do 
    get '/applications/:application_id/jobseekers/new', :to => 'jobseekers#new', :as => :new_application_jobseeker
    post '/applications/:application_id/jobseekers', :to => 'jobseekers#create'
  end

但它给了我这个错误:

No route matches [GET] "/applications/3/jobseekers/new"

点击此网址时:

localhost:3000/applications/3/jobseekers/new

3 个答案:

答案 0 :(得分:5)

您可以按如下方式指定所需的操作:

resources :applications do
  resources :jobseekers, :only=> [:new, :create]
end

答案 1 :(得分:4)

您的路线中的问题是您在嵌套路线中包含完整路径('/applications/:application_id/jobseekers/new' 。相反,您需要将getpost调用放入成员块:

resources :applications do
  member do
    get "jobseekers/new", :to => 'jobseekers#new'
    post "jobseekers", :to => 'jobseekers#create'
  end
end

通过执行此操作,Rails将匹配/applications/:id/部分将添加到"jobseekers/new"以获取完整路线,如果您致电rake routes,则可以看到:

new_application_jobseeker_application GET    /applications/:id/jobseekers/new(.:format) jobseekers#new
               jobseekers_application POST   /applications/:id/jobseekers(.:format)     jobseekers#create

或者,您可以定义嵌套资源,并仅使用new选项包含createonly操作:

resources :applications do
  resources :jobseekers, :only=> [:new, :create]
end

请注意,在这种情况下,路径助手会略有不同,并且会使用application_id而不是id作为应用程序的ID:

   application_jobseekers POST   /applications/:application_id/jobseekers(.:format)     jobseekers#create
new_application_jobseeker GET    /applications/:application_id/jobseekers/new(.:format) jobseekers#new

答案 2 :(得分:0)

只需手动创建带有迁移的表,模型和控制器,然后只添加所需的方法。

rails g model jobseekers