跨范围分割多个rails资源路由

时间:2015-05-30 09:58:28

标签: ruby-on-rails

我在尝试根据范围拆分控制器时遇到了一些问题。

我的代码看起来像这样

  scope '/admin' do
    resources :pages, only: [:index, :create, :new, :edit, :update, :destroy]
  end

  resources :pages, only: [:show]

理想情况下,我只是希望展示页面不在管理范围之后,但是当我致电page_path(1)时,它会路由到/admin/pages/1,而不是/pages/1

解决此问题的最简单方法是什么?

由于

更新了路线

pages_path  GET /admin/pages(.:format)  pages#index
POST    /admin/pages(.:format)  pages#create
new_page_path   GET /admin/pages/new(.:format)  pages#new
edit_page_path  GET /admin/pages/:id/edit(.:format) pages#edit
page_path   PATCH   /admin/pages/:id(.:format)  pages#update
PUT /admin/pages/:id(.:format)  pages#update
DELETE  /admin/pages/:id(.:format)  pages#destroy
GET /pages/:id(.:format)    pages#show
root_path   GET /   pages#main

并查看:

<% @pages.each do |page| %>
    <%= link_to page.title, page_path(page) %>
<% end %>

3 个答案:

答案 0 :(得分:4)

要影响路线助手名称,请使用as - 参数:

scope '/admin', as: 'admin' do

但是,将管理员的控制器放在Admin命名空间中是有意义的,所以你可以这样做:

namespace 'admin' do

这将影响路径(/admin),路由助手(admin_)和控制器命名空间(Admin::PagesController)。单独的控制器允许更容易的访问和布局控制。此外,您可以为管理员单独show,这很好。

当然,在您的表单中,您必须使用form_for [:admin, @page]form_for @page, url: admin_page_path(@page)等结构。

答案 1 :(得分:1)

  scope '/admin', as: 'admin' do
      resources :pages, only: [:index, :create, :new, :edit, :update, :destroy]
  end
  resources :pages, only: [:show]

只需按上述方法进行更改

答案 2 :(得分:0)

scope module: '/admin' do
  resources :pages, only: [:index, :create, :new, :edit, :update, :destroy]
end