资源路由(基础)
路由在 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]