📜  Ruby on Rails路由器

📅  最后修改于: 2021-01-12 02:44:39             🧑  作者: Mango

Ruby on Rails路由器

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 Method Purpose Example
GET Retrieve a resource To navigate directly to a page or by using Google, get HTTP method is used.
POST Create a resource POST HTTP method was used for older web applications.
PUT Completely update a resource Updating user profile on a website uses patch with web frameworks that support it.
PATCH Partially update a resource It is used to only update the password for a user profile on a website.

创建路线

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

如果URL看起来像这样:

/roll/1

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

get 'roll/:id' => 'roll#branch'

这是简写,

get 'roll/:id' to: 'roll/branch'

控制器将为RollController ,方法将为branch 。方法前面的#是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路由到操作的便利。在这里,您必须在应用程序中分别设置每个路由,因为您不会通过资源丰富的路由自动获得路由组。