routes : 规定了特定格式的URL请求到后端controller的action的分发规则
Name routes
get 'users/:id', to: 'users#show', as: "user"
RESTful资源设计
get
post
put/patch
delete
定义每个请求的url请求方式,同样的url可以拥有不同的请求方式的
RESTful只是约束
让我们的代码设计更统一
让我们专注于产品实现,而不是代码设计本身
Resources routes
resources :users
Prefix Verb Url Pattern Controller#Action
users get /users users#index
users post /users users#create
new_user get /users/new users#new
edit_user get /users/:id/edit users#edit
user get /users/:id/show users#show
user patch /users/:id users#update
user put /users/:id users#update
user delete /users/:id users#destroy
rails 已经帮我们生成了每个URL的输出路由方法,通过rake routes可以查看
Namespace routes
namespace :admin do
resources :users
end
Prefix Verb Url Pattern Controller#Action
admin_users get /admin/users admin/users#index
admin_users post /admin/users admin/users#create
new_admin_user get /admin/users/new admin/users#new
edit_admin_user get /admin/users/:id/edit admin/users#edit
admin_user get /admin/users/:id/show admin/users#show
admin_user patch /admin/users/:id admin/users#update
admin_user put /admin/users/:id admin/users#update
admin_user delete /admin/users/:id admin/users#destroy
Scope routes
scope module: "admin" do
resources :users
end
Prefix Verb Url Pattern Controller#Action
users get /users admin/users#index
users post /users admin/users#create
new_user get /users/new admin/users#new
edit_user get /users/:id/edit admin/users#edit
user get /users/:id/show admin/users#show
user patch /users/:id admin/users#update
user put /users/:id admin/users#update
user delete /users/:id admin/users#destroy
我们如果不想在url中显示/admin前缀可以这么写
反之如果我们想在url中显示/admin但是不想把代码定义在域名空间下可以如下做法:
scope '/admin' do
resources :users
end
Prefix Verb Url Pattern Controller#Action
users get admin/users users#index
users post admin/users users#create
new_user get admin/users/new users#new
edit_user get admin/users/:id/edit users#edit
user get admin/users/:id/show users#show
user patch admin/users/:id users#update
user put admin/users/:id users#update
user delete admin/users/:id users#destroy
Nested routes
resources :users do
resources :blogs
end
Prefix Verb URI Pattern Controller#Action
user_blogs GET /users/:user_id/blogs(.:format) blogs#index
POST /users/:user_id/blogs(.:format) blogs#create
new_user_blog GET /users/:user_id/blogs/new(.:format) blogs#new
edit_user_blog GET /users/:user_id/blogs/:id/edit(.:format) blogs#edit
user_blog GET /users/:user_id/blogs/:id(.:format) blogs#show
PATCH /users/:user_id/blogs/:id(.:format) blogs#update
PUT /users/:user_id/blogs/:id(.:format) blogs#update
DELETE /users/:user_id/blogs/:id(.:format) blogs#destroy
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
嵌入式路由体验出呢user和blog的关系,一对多可以这么定义
排除不需要的action和请求方式
resources :users, only: [:index, :destroy]
自定义路由
resources :users do
member do
post :status
end
collection do
get :online
end
end
status_user POST /users/:id/status(.:format) users#status
online_users GET /users/online(.:format) users#online
上述会生成资源users路由外还生成呢上面连个路由,member路由是指由传id的被称为单数路由
collection路由是不传id的被称为集合理由,单个定义可以如下写法:
resources :users do
post :status, on: :member
get :online, on: :collection
end
Non-Resourcesful routes
# :action and :id are optional
# /photos/show/1
# /photos/show
# /photos # => index action
get ':controller(/:action(/:id))'(括号中的参数可以传也可以不传)
GET /:controller(/:action(/:id))(.:format) :controller#:action
# /photos/show/1/2
get ':controller/:action/:id/:user_id'(严格匹配,必须传入id参数)
GET /:controller/:action/:id/:user_id(.:format) :controller#:action
match 'photos', to: 'photos#show', via: [:get, :post](一个路由可以定义多种请求)
photos GET|POST /photos(.:format) photos#show
Segment Constraints routes
# /photos/A12345
get 'photos/:id', to: 'photos#show', constraints: { id: /[A-Z]\d{5}/ }(id做呢严格的限定)
GET /photos/:id(.:format) photos#show {:id=>/[A-Z]\d{5}/}
根路由: "/"
root to: 'pages#main'
root 'pages#main'
Prefix Verb URI Pattern Controller#Action
root GET / pages#main
Routes
controller
controller :welcome do
get '/welcome/hello'
end
Prefix VerbURI Pattern Controller#Action
welcome_hello GET /welcome/hello(.:format) welcome#hello
rails routes路由笔记
最新推荐文章于 2023-05-23 10:02:45 发布