好的,我正在拍摄这样的网址/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
答案 0 :(得分:5)
您可以按如下方式指定所需的操作:
resources :applications do
resources :jobseekers, :only=> [:new, :create]
end
答案 1 :(得分:4)
您的路线中的问题是您在嵌套路线中包含完整路径('/applications/:application_id/jobseekers/new'
) 。相反,您需要将get
和post
调用放入成员块:
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
选项包含create
和only
操作:
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
等