我有一个资源,我希望index / show面向公众,但其他所有内容都要用' / admin'作为范围。我期待以下工作:
resources :jobs, only: [:index, :show]
scope 'admin' do
resources :jobs, except: [:index, :show]
end
而且确实如此。我遇到的唯一问题是,在为post
执行:create
时,使用form_for无法识别范围。它将行动设置为' / jobs'而不是' / admin / jobs'。
这不是一件大事,因为我可以通过创建特定的创建路径并在form_for
的网址中指定
resources :jobs, only: [:index, :show]
scope 'admin' do
post :jobs, to: 'jobs#create', as: 'create_job'
resources :jobs, only: [:edit, :new, :destroy, :update]
end
有没有更好的方法可以解决这个问题?
编辑:如果我没有为:create
指定特定路线,以下是我的路线 jobs GET /jobs(.:format) jobs#index
job GET /jobs/:id(.:format) jobs#show
POST /admin/jobs(.:format) jobs#create
new_job GET /admin/jobs/new(.:format) jobs#new
edit_job GET /admin/jobs/:id/edit(.:format) jobs#edit
PATCH /admin/jobs/:id(.:format) jobs#update
PUT /admin/jobs/:id(.:format) jobs#update
DELETE /admin/jobs/:id(.:format) jobs#destroy
答案 0 :(得分:0)
有两种解决方案,指定一个显式网址:
form_for @job, url: admin_job_path(@job) do |f|
但是你必须处理编辑(更新)和手动创建(不同的URL)之间的区别。
所以最好的方法就是写
form_for [:admin, @job] do |f|