2015-05-30 41 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