資源路由(基礎)

路由在 config/routes.rb 中定義。它們通常使用 resourcesresource 方法定義為一組相關路線。

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

你可以限制使用 onlyexcept 生成的操作:

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]