什么是路由?
路在何方,路在脚下。但在web开发中,我们经常会涉及到“路由”的概念,这也是每一个web框架最核心的功能之一,官方解释太过生硬,其实现在web框架路由的概念基本可以简化为:路由就是URL到函数的映射。
rails路由的作用?
请求首先发送给路由,然后由路由确定应该把请求发送给谁,以及如何解析。在这个阶段,路由会在控制器中找出负责处理请求的动作交互,也可以调用其他动作。最后,动作会向视图提供必要的信息,经视图渲染后呈现给用户。
rails中的路由的优点?
rails有两个原则,其中一个就是约定大于配置,所以rails中的路由的约定也是严格基于RESTFful风格的。当用户在页面进行请求时其实是在操作一些资源,而同一个资源可以有不同的请求方法(get、post、put、patch、delete)分别对资源进行CURD操作。
例子
说了那么多,没有一个场景,理解也是很片面的,所以这里给大家一个简单的例子(这里默认装了rails,如果没有请自行百度)。
在我们创建了一个新的项目时,我们可以在我们的config/router.rb里添加如下代码:
*我们添加一个资源时,资源一般都是复数形式
然后在我们终端执行:rails routes
就会看到下面这张图
第一列对应的是请求对应的控制器中的动作,
第二列是我们超链接的链接前缀,
第三列是我们的请求方法,
第四列是生成的url
第一行:get请求方法
这里的请求是get,然后超链接的链接前缀是articles,这样rails会自动将我们的请求绑定到controller控制器中的index动作,然后跳转到对应的index.html.erb这个视图上。对应产生的url为: /articles
代码:
<%= link_to '访问的是index动作对应的index.html.erb视图', articles_path %>
第二行:post请求方法
post请求一般都会在表单里面对数据进行提交,从路由图可以看出对应的是控制器中的create动作。post方法一般用于提交数据,跳转页面并不是他的主要用途,所以url可以看情况指定,这里指定提交后跳转到主页面。
代码:
<%= form_for :article, url: articles_path do |f|%>
<% end %>
// :article 是表单创建或者编辑的对象名字
第三行:get请求
一般用于展示创建资源的操作界面,我们要创建一个资源,就必须要有一个页面去承载这个操作,我们通常会在诸如一个弹窗或者一个新的页面去让用户有创建资源的操作。
这里请求方法是get,然后前缀是new_article,我们就可以知道对应控制器中的new动作,对应的视图是new_html.erb,然后生成的url为 /article/new
代码:
<%= link_to '添加资源', new_article_path %>
第四行:get请求
一般用于展示编辑资源的操作界面,与第三行的作用类似
这里请求的依然是get,然后前缀是edit_article,我们就可以知道对应的是控制器中的edit动作,对应的视图是edit_html.erb,然后生成的url为:/article/:id/edit
代码:
<%= link_to '编辑资源',edit_article_path(:id) %>
//路径里需要传参数
第五行:get请求
这里主要用于显示单个资源的详情页面,超链接前缀是article,可以看出对应的是控制器中的show这个动作,与之对应的是show.html.erb这个试图文件,生成的url为: /article/:id
代码:
<%= link_to "展示单个资源", article_path %>
第六行:patch请求
作为一个http的一个扩展方法,在web性能高效的潮流中,patch也是用的越来越多,它主要是更新局部字段。
patch请求方法没有超链接前缀,它对应的是控制器中的update方法。
代码:
<%= form_for :article ,method: 'patch' , raticles_path do |f| %>
第六行:patch请求
作为一个http的一个常用方法,在web性能高效的潮流中,put也是用的越来越多,它主要是更新局部字段,与post的区别就是post提交一百次,会与一百次数据,put提交一百次,只有一个数据。
put请求方法没有超链接前缀,它对应的是控制器中的update方法。
代码:
<%= form_for :article ,method: 'put' , raticles_path do |f| %>
第七行:delete请求
delete请求同样没有超链接前缀,对应的是控制器中的destroy动作
代码:
<%= link_to “删除指定资源” , :confirm =>“Are you sure”, :method=>:delete %>
到这里rails框架的基本路由和与之对应的请求方法也简述了一遍,虽然理解起来不难,但是在开发过程中,这个是非常灵活的,我们需要不断学习,不断进步,才能成为一个合格的开发人员。