本文概述
Rails路由识别URL, 并将其分派给控制器的动作。它还会生成路径和URL。 Rails路由处理URL的方式与其他语言路由不同。它确定请求的控制器, 参数和操作。
基本上, 路由是一种将传入请求重定向到控制器和操作的方法。它取代了mod_rewrite规则。最好的事情是, 在Rails中, 路由可与任何Web服务器一起使用。
Rails通过config / routes.rb文件处理路由, 而不是依靠Web服务器来控制URL路由。该文件控制URL的各个方面, 例如规则, 这些规则试图匹配请求的URL路径并确定将请求定向到何处。
Rails路由的主要用途如下:
- 将URL连接到代码
- 从代码生成路径和URL
RESTful路线
要了解路由, 我们需要了解REST。 Rails主要将REST用于URL路由。因此, REST对于理解Rails路由很重要。它代表代表性状态转移。
REST使用几种HTTP方法来表示用户或应用程序执行的操作类型。
HTTP方法 | Purpose | Example |
---|---|---|
GET | 检索资源 | 要直接导航到页面或使用Google, 请使用get HTTP方法。 |
POST | 创建资源 | POST HTTP方法用于较旧的Web应用程序。 |
PUT | 完全更新资源 | 在网站上更新用户配置文件使用带有支持它的Web框架的补丁。 |
PATCH | 部分更新资源 | 它仅用于更新网站上用户配置文件的密码。 |
创建路线
要创建路线, 你需要将URL映射到控制器和操作。路由看到请求时, 会将其分派到与URL匹配的控制器操作中。
如果URL看起来像这样:
/roll/1
假设路由定义为:它将被映射到控制器的动作:
get 'roll/:id' => 'roll#branch'
这是简写,
get 'roll/:id' to: 'roll/branch'
控制器将为RollController, 方法将为分支。方法前面的#是Ruby中一种表示实例方法的方法。
例:
让我们通过一个例子来看它。
创建一个学生应用程序。
rails new student
在其中创建一个名为RollController的控制器。将为动作定义路线, 这些动作定义为RollController类中定义的方法。
rails generate controller RollController
打开library / config / routes.rb文件, 并在其中写入以下代码。
Rails.application.routes.draw do
get 'roll/list'
get 'roll/new'
post 'roll/create'
patch 'roll/update'
get 'roll/list'
get 'roll/show'
get 'roll/edit'
get 'roll/delete'
get 'roll/update'
get 'roll/show_subjects'
end
它定义了应用程序中可用的动作以及动作的类型, 例如补丁, 获取和发布。
要列出应用程序中用于跟踪路由问题的已定义路由, 请使用以下命令。
rake routes
输出

资源路由
资源路由允许你声明控制器的所有通用路由。它在一行代码中为索引, 创建, 更新, 读取, 删除和新操作定义了单独的路由。
网络资源
浏览器通过某些HTTP方法(例如GET, POST, PUT, DELETE和PATCH)从URL请求页面。每种方法都对请求执行操作。
CRUD, 动词和动作
一个资源丰富的路由提供了HTTP动词和URL之间到控制器动作的映射。按照惯例, 每个操作都会在数据库中映射特定的CRUD操作。
路径和URL助手
通过创建资源丰富的路由, 可以在应用程序中公开许多控制器的助手。
同时定义多个资源
你可以通过对资源的一次调用定义所有资源, 从而为多个资源创建路由。
单一资源
单个资源是用户请求的没有任何引用ID的那些资源。例如, 你可以使用单个资源来映射/ profile(而不是/ profile /:id)以显示操作。
控制器命名空间和路由
控制器组在名称空间下组织。通常, 许多管理控制器是在Admin ::名称空间下命名的。这些控制器位于app / controllers / admin目录下, 可以在路由中分组在一起。
嵌套资源
一些资源是其他资源的子资源。嵌套路由使你可以捕获路由中的关系。
路由问题
路由问题使你可以声明可在其他资源和路由内重用的通用路由。
从对象创建路径和URL
Rails还可以根据一系列参数创建路径和URL。
添加更多的RESTful动作
你不仅限于默认的RESTful路由。你可以创建其他路线以应用于集合或集合的单个成员。
非资源路线
Rails为你提供了将任意URL路由到操作的便利。在这里, 你必须在应用程序中分别设置每个路由, 因为你不会通过资源丰富的路由自动获得路由组。