资源路由(基础)

路由在 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]