【问题标题】:Rails route for partially scoped resource and form_for部分范围资源和 form_for 的 Rails 路线
【发布时间】:2014-07-17 14:20:00
【问题描述】:

我有一个资源,我希望 index/show 面向公众,但其他所有内容都以“/admin”为范围。我期待以下工作:

  resources :jobs, only: [:index, :show]
  scope 'admin' do
    resources :jobs, except: [:index, :show]
  end

在一定程度上确实如此。我遇到的唯一问题是使用 form_for 在为:create 执行post 时无法识别范围。它将操作设置为“/jobs”而不是“/admin/jobs”。

这没什么大不了的,因为我可以通过创建特定的创建路径并在 form_for 的 url 中指定它来解决它

  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

【问题讨论】:

  • form_for [:admin, :job] 呢?

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


【解决方案1】:

有两种解决方案,指定一个显式的url:

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

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

所以最好的方法就是写

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

【讨论】:

  • 对于这两个建议,访问该页面只会给我一个未定义的“admin_job_path”方法。创建的路径而不是 admin_job_path 只是“job_path”。不知道为什么,因为 :create 在 /admin 范围内。
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2011-09-19
  • 2011-04-13
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多