2013-11-26 182 views
2

我目前正在嘗試修復我的訂單資源的路由。我有一個'admin'命名空間,其中包含用於管理我的應用程序中的各種資源的關鍵資源操作。Ruby on Rails命名空間路由

我希望客人能夠在管理員名稱空間外部創建訂單,而我希望所有訂單資源的操作都可以在管理員名稱空間內使用。但是,當我在名稱空間外指定':create'操作時,':index'操作在名稱空間內不可用。我唯一的理論是這兩個動作共享相同的路徑,即/ orders,因爲當我從名稱空間外部刪除':create'動作時,':index'動作在命名空間內開始工作。

因此,考慮到這一點,我如何才能訪問命名空間之外的':create'動作和命令資源的admin命名空間內的':index'動作?

這裏是我的路線設置:

orders POST /orders(.:format)      orders#create 

這意味着訂單:

resources :orders, :only => [:new, :create, :update_country] 

    scope '/admin' do 
     resources :orders 
    end 

回答

-2

我跑的時候 '耙路線',訂單#創建是利用 'orders_path/orders_url' 注意到#index在管理員名稱空間內沒有路徑在視圖內引用:

 GET /admin/orders(.:format)    orders#index 

因此,解決方案將可以使用不同的語法來實現具有定製路徑值的名稱空間,例如如下圖所示「admin_orders_path」:耙路線

的routes.rb

namespace :admin do 
    resources :orders 
    end 

結果:

   orders POST /orders(.:format)      orders#create 
     admin_orders GET /admin/orders(.:format)    admin/orders#index 

事後看來,這似乎是內管理我的管理員命名空間的更加清晰,簡潔的方式應用程序;爲路由資源定義了管理路徑/ url值。

0

「new」方法用於呈現資源的創建表單,而提交此表單時會調用create方法。因此,爲了在管理命名空間和命名空間內的其他操作之外啓用命令,請嘗試以下操作:

resources :orders, only: [:new] 

scope '/admin' do 
    resources :orders, except: [:new] 
end