我在尝试根据范围拆分控制器时遇到了一些问题。
我的代码看起来像这样
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 %>
答案 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