Ruby on Rails 路由器

2024 年 12 月 18 日 | 阅读 4 分钟

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 路由非常重要。它代表具象状态传输。

有几种 HTTP 方法与 REST 一起使用,以表示用户或应用程序执行的操作类型。

HTTP 方法目的示例
GET检索资源要直接导航到页面或使用 Google,可以使用 get HTTP 方法。
POST创建资源POST HTTP 方法用于较旧的 Web 应用程序。
PUT完全更新资源在支持该功能的 Web 框架中使用 patch 来更新网站上的用户资料。
PATCH部分更新资源它用于仅更新网站上用户资料的密码。

创建路由

要创建路由,您需要将 URL 映射到控制器和动作。当路由器看到请求时,它会将其分发到与 URL 匹配的控制器的动作。

如果 URL 看起来像这样

它将被映射到控制器的动作,假设路由定义为

这是简写形式,

控制器将是 RollController,方法将是 branch。方法前面的 # 是 Ruby 中表示它是一个实例方法的方式。

示例

让我们通过一个例子来看一下。

创建一个 student 应用程序。

在此应用程序中,创建一个名为 RollController 的控制器。路由将为在 RollController 类中定义为方法的操作定义。

打开 library/config/routes.rb 文件,并在其中编写以下代码。

它定义了应用程序中可用的操作和操作类型,例如 patch、get 和 post。

要列出应用程序中定义的用于跟踪路由问题的路由,请使用以下命令。

输出

Ruby On rails routers 1

资源路由

资源路由允许您声明控制器的所有常见路由。它在一行代码中定义了 index、create、update、read、delete 和 new 操作的单独路由。

Web 上的资源

浏览器通过某些 HTTP 方法(如 GET、POST、PUT、DELETE 和 PATCH)从 URL 请求页面。每个方法都对请求执行一个操作。

CRUD、动词和动作

资源型路由提供了 HTTP 动词和 URL 到控制器动作之间的映射。按照惯例,每个动作都会映射数据库中的特定 CRUD 操作。

路径和 URL 助手

通过创建资源型路由,将在应用程序中公开许多控制器助手。

同时定义多个资源

您可以通过使用单个对资源的调用来定义多个资源的路由。

单数资源

单数资源是指用户在没有任何引用 ID 的情况下请求的资源。例如,您可以使用单数资源将 /profile(而不是 /profile/:id)映射到 show 动作。

控制器命名空间和路由

控制器组在命名空间下组织。通常,许多管理控制器都在 Admin:: 命名空间下命名。这些控制器位于 app/controllers/admin 目录下,并且可以在路由器中组合在一起。

嵌套资源

某些资源是其他资源的子资源。嵌套路由允许您在路由中捕获关系。

路由关注点

路由关注点允许您声明可以在其他资源和路由中重复使用的常见路由。

从对象创建路径和 URL

Rails 还可以从参数数组创建路径和 URL。

添加更多 RESTful 动作

您不限于默认的 RESTful 路由。您可以创建其他路由以应用于集合的集合或各个成员。

非资源型路由

Rails 为您提供了一种将任意 URL 路由到操作的工具。在这里,您必须在应用程序中单独设置每个路由,因为您不会通过资源型路由自动获得路由组。