確定路線
Rails 提供了幾種組織路由的方法。
網址範圍 :
scope 'admin' do
get 'dashboard', to: 'administration#dashboard'
resources 'employees'
end
這會生成以下路由
get '/admin/dashboard', to: 'administration#dashboard'
post '/admin/employees', to: 'employees#create'
get '/admin/employees/new', to: 'employees#new'
get '/admin/employees/:id/edit', to: 'employees#edit'
get '/admin/employees/:id', to: 'employees#show'
patch/put '/admin/employees/:id', to: 'employees#update'
delete '/admin/employees/:id', to: 'employees#destroy'
在伺服器端,將一些檢視儲存在不同的子資料夾中,將管理檢視與使用者檢視分開可能更有意義。
範圍按模組
scope module: :admin do
get 'dashboard', to: 'administration#dashboard'
end
module
在給定名稱的子資料夾下查詢控制器檔案
get '/dashboard', to: 'admin/administration#dashboard'
你可以通過新增 as
引數來重新命名路徑助手字首
scope 'admin', as: :administration do
get 'dashboard'
end
# => administration_dashboard_path
使用 namespace
方法,Rails 提供了一種方便的方法來完成上述所有操作。以下宣告是等效的
namespace :admin do
end
scope 'admin', module: :admin, as: :admin
控制範圍
scope controller: :management do
get 'dashboard'
get 'performance'
end
這會生成這些路線
get '/dashboard', to: 'management#dashboard'
get '/performance', to: 'management#performance'
淺巢狀
資源路由接受:shallow
選項,有助於儘可能縮短 URL。資源不應巢狀多個深度級別。避免這種情況的一種方法是建立淺路線。目標是將父集合 URL 段留在不需要它們的位置。最終結果是生成的唯一巢狀路由是針對:index
,:create
和:new
操作。其餘的儲存在他們自己的淺層 URL 上下文中。自定義淺路徑的範圍有兩個選項:
-
:shallow_path :使用指定引數對成員路徑進行字首
scope shallow_path: "sekret" do resources :articles do resources :comments, shallow: true end end
-
:shallow_prefix :將指定的引數新增到命名助手
scope shallow_prefix: "sekret" do resources :articles do resources :comments, shallow: true end end
我們還可以通過以下方式說明 shallow
路線:
resources :auctions, shallow: true do
resources :bids do
resources :comments
end
end
或者如下編碼(如果你是快樂的話):
resources :auctions do
shallow do
resources :bids do
resources :comments
end
end
end
產生的路線是:
字首 | 動詞 | URI 模式 |
---|---|---|
bid_comments | 得到 | /bids/:bid_id/comments(.:format) |
POST | /bids/:bid_id/comments(.:format) | |
new_bid_comment | 得到 | /bids/:bid_id/comments/new(.:format) |
edit_comment | 得到 | /comments/:id/edit(.:format) |
評論 | 得到 | /comments/:id(.:format) |
補丁 | /comments/:id(.:format) | |
放 | /comments/:id(.:format) | |
刪除 | /comments/:id(.:format) | |
auction_bids | 得到 | /auctions/:auction_id/bids(.:format) |
POST | /auctions/:auction_id/bids(.:format) | |
new_auction_bid | 得到 | /auctions/:auction_id/bids/new(.:format) |
edit_bid | 得到 | /bids/:id/edit(.:format) |
出價 | 得到 | /bids/:id(.:format) |
補丁 | /bids/:id(.:format) | |
放 | /bids/:id(.:format) | |
刪除 | /bids/:id(.:format) | |
拍賣 | 得到 | /auctions(.:format) |
POST | /auctions(.:format) | |
new_auction | 得到 | /auctions/new(.:format) |
edit_auction | 得到 | /auctions/:id/edit(.:format) |
拍賣 | 得到 | /auctions/:id(.:format) |
補丁 | /auctions/:id(.:format) | |
放 | /auctions/:id(.:format) | |
刪除 | /auctions/:id(.:format) |
如果仔細分析生成的路由,你會注意到只有在需要確定要顯示的資料時才會包含 URL 的巢狀部分。