2015-05-30 20 views
2

我有一些问题试图根据范围拆分控制器。多个导轨资源路径跨范围拆分

我的代码看起来像这样

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

副本视图代码,而“ADMIN_”生成(1) –

+0

更新原来​​的问题 – williamthomas

回答

4

要影响路由助手的名字,使用as -parameter:

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)

+0

但以前的路线。 –

+0

@ user123您的路由定义冲突:'page_path'首先在'admin'范围内定义,然后在下一个'resources'定义中意外地重用它,而路由帮助程序不会被覆盖。我能想象的最干净的解决方案是特定于管理员的路线前缀,因此它们不会发生冲突。 –

+0

感谢您的帮助,命名空间管理无疑是更聪明的选择。感谢您的帮助D方和@ user123 – williamthomas

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

刚做的修改如上你在哪里写这page_path

+0

这工作,但是当更新我得到'没有路线匹配[补丁]“/页/ 2”' – williamthomas

+0

当这个错误来临? –

+0

当提交表单来更新页面条目时。更新obv不会得到通过 – williamthomas

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