2014-01-14 108 views
0

我只想更改我的控制器的某些操作的路徑。更改某些操作的路徑

例如,我對我的ExampleController有以下操作。

  • 創建
  • 編輯
  • 銷燬
  • 更新
  • 指數
  • 顯示

我很想有我newcreatedeleteupdate行動在路徑/admin/example/和其他(indexshow/example上可用。

我當然可以通過添加新的路線就像這樣:

match "/admin/example/:id/destroy", to: "example#destroy", via: "destroy"

但我並不想這樣做,對於每一個控制器。我試着做以下幾點:

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

這似乎是工作,但每當我想創建一個新的example對象,它給了我下面的錯誤:

No route matches [POST] "/example"

這也結束了上網址/example而不是/admin/example

我在正確的軌道上還是我在做一些完全錯誤的事。我想將所有基於example的操作都保存在同一個控制器中。

更新:我嘗試以下基於@apneadiving的答案:

<%= form_for [:admin, @example] do |f| %> 
<% end %> 

但他導致NoMethodError,而呈現的形式,與消息:

undefined method 'admin_example_path' for #<#<Class:0x007ff3cceeb778>:0x007ff3cbe85820>

回答

0

你必須給你的表單的細節。

form_for @post正在尋找[POST] "/example"

所以使用:

form_for [:admin, @post] 
+0

這將導致一個錯誤,我更新的最新信息的問題。感謝您看看這個。 –

+0

哦Isee,你使用範圍而不是命名空間......嗯,當你有管理員/標準用戶邏輯時,爲什麼你在一個控制器中保留動作? – apneadiving

+0

那麼我使用before_action方法保護動作,並希望在一個控制器中保留一個對象的所有動作。這實際上只是一個整體變化(更好的網址)。 –