部分作用域资源和form_for的Rails路由

时间:2014-07-17 14:20:01

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

我有一个资源,我希望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

1 个答案:

答案 0 :(得分:0)

有两种解决方案,指定一个显式网址:

form_for @job, url: admin_job_path(@job) do |f|

但是你必须处理编辑(更新)和手动创建(不同的URL)之间的区别。

所以最好的方法就是写

form_for [:admin, @job] do |f|