資源路由(基礎)
路由在 config/routes.rb
中定義。它們通常使用 resources
或 resource
方法定義為一組相關路線。
resources :users
建立以下七條路線,全部對映到 UsersController
的動作:
get '/users', to: 'users#index'
post '/users', to: 'users#create'
get '/users/new', to: 'users#new'
get '/users/:id/edit', to: 'users#edit'
get '/users/:id', to: 'users#show'
patch/put '/users/:id', to: 'users#update'
delete '/users/:id', to: 'users#destroy'
動作名稱顯示在上面 to
引數中的 #
之後。必須在 app/controllers/users_controller.rb
中定義具有相同名稱的方法,如下所示:
class UsersController < ApplicationController
def index
end
def create
end
# continue with all the other methods…
end
你可以限制使用 only
或 except
生成的操作:
resources :users, only: [:show]
resources :users, except: [:show, :index]
你可以通過執行以下任意時間檢視應用程式的所有路徑:
Version < 5
$ rake routes
Version >= 5
$ rake routes
# OR
$ rails routes
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
要僅檢視對映到特定控制器的路由:
Version < 5
$ rake routes -c static_pages
static_pages_home GET /static_pages/home(.:format) static_pages#home
static_pages_help GET /static_pages/help(.:format) static_pages#help
Version >= 5
$ rake routes -c static_pages
static_pages_home GET /static_pages/home(.:format) static_pages#home
static_pages_help GET /static_pages/help(.:format) static_pages#help
# OR
$ rails routes -c static_pages
static_pages_home GET /static_pages/home(.:format) static_pages#home
static_pages_help GET /static_pages/help(.:format) static_pages#help
你可以使用 -g
選項搜尋路線。這顯示了與輔助方法名稱,URL 路徑或 HTTP 謂詞部分匹配的任何路由:
Version < 5
$ rake routes -g new_user # Matches helper method
$ rake routes -g POST # Matches HTTP Verb POST
Version >= 5
$ rake routes -g new_user # Matches helper method
$ rake routes -g POST # Matches HTTP Verb POST
# OR
$ rails routes -g new_user # Matches helper method
$ rails routes -g POST # Matches HTTP Verb POST
此外,在開發模式下執行 rails
伺服器時,你可以通過搜尋過濾器訪問顯示所有路線的網頁,並在 <hostname>/rails/info/routes
上從上到下進行優先順序匹配。它看起來像這樣:
幫手 | HTTP 動詞 | 路徑 | 控制器#行動 |
---|---|---|---|
路徑/網址 | [路徑匹配] | ||
users_path | 得到 | /users(.:format) | 使用者#指數 |
POST | /users(.:format) | 使用者建立# | |
new_user_path | 得到 | /users/new(.:format) | 使用者#新 |
edit_user_path | 得到 | /users/:id/edit(.:format) | 使用者編輯# |
user_path | 得到 | /users/:id(.:format) | 使用者#秀 |
補丁 | /users/:id(.:format) | 使用者#更新 | |
放 | /users/:id(.:format) | 使用者#更新 | |
刪除 | /users/:id(.:format) | 使用者#銷燬 |
可以使用方法 resource
而不是 routes.rb
中的 resources
,僅為成員(非集合)宣告路徑。使用 resource
,預設情況下不會建立 index
路由,但只有在明確要求這樣的路由時:
resource :orders, only: [:index, :create, :show]