为了更好的阅读体验。欢迎訪问 作者博客原文
Route是什么
Rails中URL的约定严格基于RESTful
风格的。client的请求事实上是在操作一些资源。同一资源的不同的请求动作(GET
, POST
, PUT
, PATCH
, DELETE
)分别对资源进行不同的操作(CRUD)。
默认的情况下。我们仅仅须要在routes.rb文件里配置好资源,Rails会为该资源生成7种不同的路由,依据路由就能够将client的请求转交给服务端相应的控制器进行处理,然后做出正确的响应。
Rails Route能识别这样的资源式(RESTful
风格)的路由以及非资源式的路由,它是client请求和服务端控制器的粘合剂。能将URL分发给控制器进行处理。
Rails路由有啥用
Rails路由主要有两个作用,首先作为client请求和服务端控制器的粘合剂,它负责分发请求,链接URL和Controller。还有一个主要作用是动态生成路径和URL。
把URL与代码链接起来
请求GET /articles/17
相应的路由是
get '/articles/:id', to: 'articles#show',
- 这个请求就会被交给
articles
控制器中的show
动作处理,并把{ id: '17' }
传入params
动态生成路径和URL
get '/articles/:id', to: 'articles#show', as: 'article'
在控制器中有
@article = Article.find(17)
视图中有
<%= link_to 'Article Record', article_path(@patient) %>
会生成路径/articles/17
。
提示
路由是依照顺序定匹配的,一旦匹配成功就会寻找相应的控制器动作。
资源式路由
使用资源路径能够高速声明资源式控制器全部的常规路由,无需分别为 index、show、new、edit、create、update 和 destroy 动作分别声明路由,仅仅需一行代码就能搞定
加入一个资源
我们在routes.rb文件里加入一个资源photos
Rails.application.routes.draw do
resources :photos
end
执行$ rake routes
能够查看生成的路由
$ rake routes
Prefix Verb URI Pattern Controller
photos GET /photos(.:format) photos
POST /photos(.:format) photos
new_photo GET /photos/new(.:format) photos
edit_photo GET /photos/:id/edit(.:format) photos
photo GET /photos/:id(.:format) photos
PATCH /photos/:id(.:format) photos
PUT /photos/:id(.:format) photos
DELETE /photos/:id(.:format) photos
能够看到生成例如以下7种路由
HTTP 方法 |
路径 |
控制器#动作 |
作用 |
GET |
/photos |
photos#index |
显示全部文章 |
GET |
/photos/new |
photos#new |
显示新建文章的表单 |
POST |
/photos |
photos#create |
新建文章 |
GET |
/photos/:id |
photos#show |
显示指定的文章 |
GET |
/photos/:id/edit |
photos#edit |
显示编辑文章的表单 |
PATCH/PUT |
/photos/:id |
photos#update |
更新指定的文章 |
DELETE |
/photos/:id |
photos#destroy |
删除指定的文章 |
`
除了生成相应的7种不同的路由。还会生成一些具名辅助方法
-
photos_path
,返回 /photos
-
new_photo_path
, 返回 /photos/new
-
edit_photo_path(:id)
, 返回 /photos/:id/edit
,比如 edit_photo_path(10)
返回 /photos/10/edit
-
photo_path(:id)
, 返回 /photos/:id
,比如 photo_path(10)
返回 /photos/10
又来一个资源
实际项目中,我们会有非常多资源,须要为他们声明路由能够将多个资源放在一个resources
中声明,这样能够节省一定的时间。
resources :photos, :books, :videos
或者(推荐使用)
resources :photos
resources :books
resources :videos
单数资源路径
我们会有不使用 ID就能查看资源的场景。比如,/profile 一直显示当前登入用户的个人信息。
此时。我们能够把 /profile(不是 /profile/:id)映射到 show 动作:
get 'profile', to: 'users#show'
或者使用Symbol
get 'profile', to: :show
相同我们能够配置一个单数资源
resource :geocoder
执行$ rake routes
。会看到生成六种不同的路由
$ rake routes
Prefix Verb URI Pattern Controller
geocoder POST /geocoder(.:format) geocoders
new_geocoder GET /geocoder/new(.:format) geocoders
edit_geocoder GET /geocoder/edit(.:format) geocoders
GET /geocoder(.:format) geocoders
PATCH /geocoder(.:format) geocoders
PUT /geocoder(.:format) geocoders
DELETE /geocoder(.:format) geocoders
相同单数资源式路由生成下面帮助方法:
-
new_geocoder_path
, 返回 /geocoder/new
-
edit_geocoder_path
。返回 /geocoder/edit
-
geocoder_path
, 返回 /geocoder
提示
单数资源使用场景不是非常多。了解怎么使用就可以。
资源嵌套
实际项目中资源通常不是独立存在的。互相有具有一定业务和逻辑关系,比方一对多
,一对一
,多对多
。在rails中。解决一个资源属于还有一个资源的子资源的情况,须要使用到资源嵌套
来定义它们的路由。
……
为了更好的阅读体验,很多其它内容,欢迎訪问 作者博客原文
请发表评论