为了更好的阅读体验。欢迎訪问 作者博客原文

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#Action
photos GET /photos(.:format) photos#index
POST /photos(.:format) photos#create
new_photo GET /photos/new(.:format) photos#new
edit_photo GET /photos/:id/edit(.:format) photos#edit
photo GET /photos/:id(.:format) photos#show
PATCH /photos/:id(.:format) photos#update
PUT /photos/:id(.:format) photos#update
DELETE /photos/:id(.:format) photos#destroy

能够看到生成例如以下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#Action
geocoder POST /geocoder(.:format) geocoders#create
new_geocoder GET /geocoder/new(.:format) geocoders#new
edit_geocoder GET /geocoder/edit(.:format) geocoders#edit
GET /geocoder(.:format) geocoders#show
PATCH /geocoder(.:format) geocoders#update
PUT /geocoder(.:format) geocoders#update
DELETE /geocoder(.:format) geocoders#destroy

相同单数资源式路由生成下面帮助方法:

  • new_geocoder_path, 返回 /geocoder/new
  • edit_geocoder_path。返回 /geocoder/edit
  • geocoder_path, 返回 /geocoder

提示

单数资源使用场景不是非常多。了解怎么使用就可以。


资源嵌套

实际项目中资源通常不是独立存在的。互相有具有一定业务和逻辑关系,比方一对多一对一多对多。在rails中。解决一个资源属于还有一个资源的子资源的情况,须要使用到资源嵌套来定义它们的路由。

……

为了更好的阅读体验,很多其它内容,欢迎訪问 作者博客原文

Ruby on Rails 路由解析的更多相关文章

  1. [ruby on rails] 跟我学之(4)路由映射

    前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...

  2. Ruby Rails学习中:Sass 和 Asset Pipeline,布局中的链接(Rails路由,具名路由),用户注册: 第一步

    接上篇: 一.Sass 和 Asset Pipeline Rails 中最有用的功能之一是 Asset Pipeline, 它极大地简化了静态资源文件(CSS.JavaScript 和图像)的生成和管 ...

  3. [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考

    一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...

  4. [ruby on rails] 跟我学之(9)删除数据

    首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...

  5. [ruby on rails] 跟我学之(8)修改数据

    修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...

  6. [ruby on rails] 跟我学之(7)创建数据

    通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息. 1. views初步 编辑 app/views/posts/index.html.erb这个 ...

  7. [ruby on rails] 跟我学之(6)显示指定数据

    根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET    /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...

  8. [ruby on rails] 跟我学之(5)显示所有数据

    之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...

  9. Ruby on Rails Tutorial 第一章 之 简介

    1.目标:掌握MVC和REST.生成器.迁移.路由.嵌入式Ruby 本书涉及Rails,Ruby语言,Rails默认使用的测试框架(MiniTest),Unix命令行,HTML,CSS,少量的Java ...

随机推荐

  1. input type file上传文件之后清空内容。

    上次写过如何上传文件,上传成功之后,会出现一些问题. 当我打开上传的文件,但是没有点击上传,然后关闭弹窗,接着继续上传刚才的那个文件.为了满足产品组的要求,我们一般都会把样式进行一定的覆盖. 但这就会 ...

  2. 【BZOJ4300】绝世好题(二进制,DP)

    题意: n<=100000,ai<=2*10^9 思路:按二进制逐位考虑,只要有至少1位取and后为1就可以接下去 设dp[i]为第i位取and之后为1的最长的序列长度,意会一下 #inc ...

  3. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---54

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  4. python c++ Visual Studio相关 Unable to find vcvarsall.bat问题

    使用Cython编译包的时候报错: Unable to find vcvarsall.bat 说明:https://jingyan.baidu.com/article/adc815138162e8f7 ...

  5. AC日记——文艺平衡树 洛谷 P3391

    文艺平衡树 思路: splay翻转操作模板: 虚拟最左最右端点,然后每次都把l翻转到root,r+2翻转到root的右节点: 然后在r+2的左节点上打标记: 标记需要在旋转,rank,print时下放 ...

  6. 牛客网 牛客练习赛13 B.幸运数字Ⅱ-数组 or DFS

    B.幸运数字Ⅱ 链接:https://www.nowcoder.com/acm/contest/70/B来源:牛客网     这个题就是找出来数据范围内的所有的幸运数,然后直接区间累加起来就可以了. ...

  7. Educational Codeforces Round 39 (Rated for Div. 2) B. Weird Subtraction Process[数论/欧几里得算法]

    https://zh.wikipedia.org/wiki/%E8%BC%BE%E8%BD%89%E7%9B%B8%E9%99%A4%E6%B3%95 取模也是一样的,就当多减几次. 在欧几里得最初的 ...

  8. cocos3.7.1 mac 创建项目

    cocos2d-x-3.7/tools/cocos2d-console/bin目录下,输入命令: ./cocos.py new HelloWorldDemo -p com.coco2dx.org -l ...

  9. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新

    1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...

  10. doviceone- http组件进行webservice的POST请求

    var http = mm("do_Http"); http.method = "POST"; // GET | POST http.timeout = 100 ...