Ruby on Rails 路由解析
为了更好的阅读体验。欢迎訪问 作者博客原文
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 路由解析的更多相关文章
- [ruby on rails] 跟我学之(4)路由映射
前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...
- Ruby Rails学习中:Sass 和 Asset Pipeline,布局中的链接(Rails路由,具名路由),用户注册: 第一步
接上篇: 一.Sass 和 Asset Pipeline Rails 中最有用的功能之一是 Asset Pipeline, 它极大地简化了静态资源文件(CSS.JavaScript 和图像)的生成和管 ...
- [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考
一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...
- [ruby on rails] 跟我学之(9)删除数据
首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...
- [ruby on rails] 跟我学之(8)修改数据
修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...
- [ruby on rails] 跟我学之(7)创建数据
通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息. 1. views初步 编辑 app/views/posts/index.html.erb这个 ...
- [ruby on rails] 跟我学之(6)显示指定数据
根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...
- [ruby on rails] 跟我学之(5)显示所有数据
之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...
- Ruby on Rails Tutorial 第一章 之 简介
1.目标:掌握MVC和REST.生成器.迁移.路由.嵌入式Ruby 本书涉及Rails,Ruby语言,Rails默认使用的测试框架(MiniTest),Unix命令行,HTML,CSS,少量的Java ...
随机推荐
- Accelerating Enum-Based Dictionaries with Generic EnumComparer
原文发布时间为:2011-03-03 -- 来源于本人的百度文章 [由搬家工具导入] 文章:http://www.codeproject.com/KB/cs/EnumComparer.aspx 源码: ...
- 【源码】List<T>泛型绑定repeater,以及repeater的交替绑定
原文发布时间为:2009-10-28 -- 来源于本人的百度文章 [由搬家工具导入] 后台: using System;using System.Collections.Generic; public ...
- echarts中关于merge的代码
function merge(target, source, overwrite) { // We should escapse that source is string // and enter ...
- socket介绍(webService适用场景)
1.使用场景 - 不同的移动客户端访问 - 需要访问第三方的项目 2.访问第三方应用的方式 ISO的七层模型 : 物理层.数据链路层.网络层.传输层.表示层.会话 ...
- hdu 3980 Paint Chain 组合游戏 SG函数
题目链接 题意 有一个\(n\)个珠子的环,两人轮流给环上的珠子涂色.规定每次涂色必须涂连续的\(m\)颗珠子,无法继续操作的人输.问先手能否赢. 思路 参考 转化 第一个人取完之后就变成了一条链,现 ...
- Document类
一.类结构 org.jsoup.nodes Class Document java.lang.Object org.jsoup.nodes.Node org.jsoup.nodes.Element o ...
- 自定义的类型放入STL的set中,需要重载自定义类中的“<”符号(转)
在以前学习STL的时候,曾经学到过,如果要将自定义的类型放入到set中的话,就需要重载“<”符号,原因是set是一个有序的集合,集合会按照“<”比较的大小,默认按照从小到大的顺序排列.假设 ...
- Linux 环境下安装配置 TigerVNC Server 并启用当前会话远程服务(X0VNC)
曾经喜欢用 RealVNC Server 实现 Linux/Windows 的远程控制,因为 RealVNC 为收费商业软件,支持文件传输,性能优化方面也做得不错.但 RealVNC 从 5.0 版本 ...
- hdu 1492(约数的个数)
The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- LeetCode OJ-- Distinct Subsequences ** 递推
https://oj.leetcode.com/problems/distinct-subsequences/ 对于string S 和 T求,T 是 S的几种子串. 首先想到了递归方法,列出递归公式 ...