创建: 2017/06/29

完成: 2017/06/29
更新: 2017/06/30 最开头的有效路径展示补充网页版
更新: 2017/07/21 修正错别字
更新: 2017/09/02 增加match
更新: 2017/09/07 增加root to
更新: 2018/03/22 补充所有路径助手(routing helper的参数)
更新: 2018/09/28 补充resources/resource参数和控制器之间的关系
                      补充resource的例子
更新: 2018/10/12 resource没有index, 应是show
更新: 2019/03/31 补充非Restful的路径定义写法例与说明
更新: 2019/05/14 补充concern的用例
 
REST   Representational State Transfer 代表性状态转移 
 表示所有有效路径

rails routes
 网页版:
http://localhost:3000/rails/info/routes

路径类内部可以带参数, 表示请求的参数

sample_test1_method(data_id: d.id) # 控制器名_方法名_path
 新建带命名空间的controller  rails generate controller test::con t1 t2 t3 t4
 view的位置  views/模块名/类名/...
 route的记述原则   通用的记在后面
 root记在最后
   
   
   
   
   
   
HTTP方法
 获取  GET
 创造  POST
 更新  PATCH/PUT
区别: patch为部分更新,更新传上去的
     
  put更新全部,必须上传全部
 删除  DELETE
   
 RESTful 接口定义
 位置   /config/route.rb
 resources方法

resources :names [,...]
 可以同时制定多个
 例: resources :sample1, :sample2, ...

注: 控制器名为复数

 参数

 name  model名
 
 由resources自动定义的路径  resources: :samples对应的控制器名 SamplesController.rb
 注意:路径中的参数也是可以拿出来的,params[:format]

 URL  action
 动作
 HTTP方法 作用 
 /samples(.:format)  index  GET  生成一览画面
 /samples/:id(.:format)  show  GET  生成展现单个的画面
 /samples/new(.:format)  new  GET  生成新个体注册画面
 /samples(.:format)  create  POST  从注册画面获得信息进行注册的画面
 /samples/:id/edit(.:format)  edit   GET  编辑现成个体的画面
 /samples/:id(.:format)  update  PATCH/PUT  从编辑画面进行更新
 /samples/:id(.:format)  destroy  DELETE   从一览画面删除个体
       
       

 由resources自动定义的路径助手  命令行: rails
routes
 网页版:
http://localhost:3000/rails/info/routes

 _path和_url的区别,url直接生成绝对路径(http://...)
 id也可以指定模型
 指定格式, url(..., format: :json)

 助手名(_path)  助手名(_url)  返回值(路径) 
 samples_path  samples_url  /samples
 sample_path(:id)  sample_url(:id)  /samples/:id 
 new_sample_path  new_sample_url   /samples/new 
 edit_sample_path(:id)  edit_samples_url(:id)  /samples/edit
     
     
     
     
     
 单一的resource定义

用于唯一的资源(如设定等)
 resource :name [,...]
 对应的控制器名 SamplesController.rb(仍旧复数)
 
例子: resource :sample, 如/config
show/edit/delete不带:id. 没有单独展示(一共就一个)

注: 控制器名为复数

URL  action
 动作
 HTTP方法 作用 
 /samples(.:format)  show  GET  生成一览画面
 /samples/new(.:format)  new  GET  生成新个体注册画面
 /samples(.:format)  create  POST  从注册画面获得信息进行注册的画面
 /samples/edit(.:format)  edit   GET  编辑现成个体的画面
 /samples(.:format)  update  PATCH/PUT  从编辑画面进行更新
 /samples(.:format)  destroy  DELETE   从一览画面删除个体
       
       

命令行: rails routes
网页版: http://localhost:3000/rails/info/routes

 _path和_url的区别,url直接生成绝对路径(http://...)
 id也可以指定模型
 指定格式, url(..., format: :json)

 助手名(_path)  助手名(_url)  返回值(路径) 
 sample_path  sample_url  /sample
 new_sample_path  new_sample_url   /sample/new 
 edit_sample_path(:id)  edit_sample_url(:id)  /sample/edit
   
   
   
 RESTful 接口自定义
option
 resources/resource的选项
 constraints

对路径参数设置限制
 constraints: { 参数名:
正规表达式}
 例
 resources :test, constraints: {id:
/[0-9]{1,2}/}

注: Controller为TestController

 限制类
 制約クラス
 用正规表现无法实现的复杂限制用限制类

 要求  包含match?方法
 参数为request  match?(request)
 返回值为
 true/false
 true: 路径有效
 false: 路径无效
 调用  constraints: YourClass.new
 位置  放在/app/models/...

例 
 class TimeConstraint
    def match?(request)
     
 current = Time.now
     
 current.hour >= 9 && current.hour
<= 18
    end
 end

------------------------------------------------------
 resources :test, constraints:
TimeConstraints.new

 去除format  选项 format: false
 默认为true
 改变用的视图控制器名

 默认  用资源名(model名的复数)
:tests
 Tests
 :controller  自己制定, 复数, 小写
 controller: :samples
 SamplesController
 :as  自己制定, 复数, 小写
 as: pathTests
 pathTests_path
 pathTest_path/(:id)
   
 命名空间  namespace

   生成空间内的视图控制器(与方法)
 rails generate controller
空间名::视图控制器名  方法名 
例子
 rails g controller nameSpace::samples t1 t2 t3
t4
view的位置: views/模块名/类名/...
 路径记录方法
 
 namespace :admin do
    resources :tests
 end
 获得的地址  /admin/tests/...
 获得的助手  admin_tests_path等
   
 路径记录方法
 不影响路径
 scope module: :admin do
    resources :tests
 end
注意: 这种的文件仍然在admin文件夹里
注意: 这种的助手(_path/_url)不包含范围admin
   
   
不附加空间
只要地址带就好 
 scope :admin do
    resources :tests
 end
也就是不要加module: 
如果要带特殊符号,用'...'
 scope ':admin' do
   
   
 限定使用的方法(action)  resources :tests, only: [:show, :index]
 resource :test, except[:index]
 注: 用数组包含方法的符号(Symbol)

 :only  只要指定的方法
 :except  除去指定的方法
 方法  index, show, new, create, edit, update,
delete
 注: resource去掉show
   
   
 增加方法(action)  collection 对应多个对象(object)
 member  对应一个对象(object)
 可以省略任意一个或全部(也就是不加东西)

resources :name do 
    [collection do
     
 method action
     
 ...
    end]

[member do
     
 method action
    end]
 end
 或者 resources :name, on: :member/:controller

 resources :name  name为资源
 method  HTTP方法
 get/post/patch/put/delete
 action  方法名
 生成的路径  member  
/资源名s/:id/方法名(.:format)
 collection  
 /资源名s/方法名(.:format)
 生成的路径助手  member  
 方法名_资源名_path/url
 collection  
方法名_资源名s_path/url

resources :test do
    collection do
     
 get :test1
     
 get :test2
    end

member do
     
 get :test3
    end
 end

 改变方法(action)指向的url名字  path_name: {原名: :新名, ...}
 例: resources :test, path_name: {new: :insert,
edit: :revise}
 嵌套  resources :test1 do
    resources :test2
 end

 外层地址  不变
 内层地址  test1s/:test1_id/...
 外层助手  不变
 内层助手  test1_....
注意: 单数
   
 去除嵌套路径中被嵌套部分的母路径
原(去除复制的复制)
 shallow:true

 默认  false 
  嵌套内部的,比如~test1s/21/test2s这样的没问题
 ~test1/21/test2s/1这种太复杂,改成~test2s/1
 总结: 不要id的放test1s下面,
要id的拿出来,test2s/:id 
 附加范围  scope shallow_path: :附加的前缀 do
    resources :test1 do
     
 resources :test2, shallow:true
    end
 end
 

resources :test1 do
    resources :test2,
shallow:true
 end
 

 重复的共有化

提取重复部分

concern :name do
...
end

使用

# 单个
resources :messages, concerns: :commentable
# 多个时用数组, 按数组顺序展开
resources :articles, concerns: [:commentable, :image_attachable]
# 可以展开在任何位置
concerns :sample

● 参数

 name  定义名
   

# 只提取具体方法
concern :sample do
get: test1, on:member
end # 提取整个resource/resources
concern :commentable do
resources :comments
end concern :image_attachable do
resources :images, only: :index
end
 设定默认值  get 'sample/:model/:id', default: {model: }
   
   
   
 非RESTful路径的定义
 基本
match pattern => action, via: verb [opts]

例:

match '/user/:id/show' => 'sample#t1', via: [:get]
# 只定义一个方法可以直接指定
match '/user/:id/show' => 'sample#t1', via: :get
# 也可以直接用
get '/user/:id/show' => 'sample#t1'
# 路径和方法名一直时可以省略方法名指定
get 'sample/t1' # get 'sample/t1' => 'sample#t1'
 pattern

URL地址
 ● 例

'/user/:id/show'
 action 

运行的控制器与方法
 ● 例

'sample/t1' => 'test/t1'

● 路径与方法一样时可以省略后半部分

'sample/t1'

● 也可以路径和处理的方法分开, 后者用to

'sample/t1', to: 'test#t1'
 via

HTTP方法

● 一个时可以直接指定或者用http method方法

via: [:get]
# 也可以
via: :get
#或者直接用具体http method方法
get 'test/t1' => 'sample/t1'

● 多个时数组来指定

via: [:get, :post, :update]
   
   
   
   
   
   
   
 设置首页  root to: url
 例子 root to: 'devise/user#t1'
   
   
   
   
   
   
   
   
   
   
   
   
   
   

Rails5 Route Document的更多相关文章

  1. Rails5 View Document

    更新: 2017/06/11 更新: 2017/06/15 加粗,submit必须放在form_for内部 更新: 2017/06/23 对待完成的追加# TODO:                 ...

  2. Rails5 Model Document

    创建: 2017/06/09 更新: 2017/06/21 更新: 2017/06/23 对待未完成的追加# TODO: 更新: 2017/06/29 修正文件名db/seed.rb ---> ...

  3. Rails5 Controller Document

    更新: 2017/06/28 大致完成全部 更新: 2017/06/29 补充module文件命名规则 更新: 2017/07/09 补充session的设置 更新: 2018/03/06 修正ren ...

  4. WPF嵌入百度地图完整实现

    无论是做App还是web开发,很多都会用到地图功能,一般都会调用第三方的API实现地图功能!而正如国内的地图API提供方,基本上对Android.IOS和web开发提供了很完整的一套API,但是对于桌 ...

  5. odoo打包下载

    view 视图中下载按钮的编辑 <record id="action_download_zip" model="ir.actions.server"> ...

  6. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  7. php产品细节图多图上传示例代码 无刷新

    前台文件代码 upload.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  8. Backbone源码解析(五):Route和History(路由)模块

    今天是四月十二号,距离上次写博已经将近二十天了.一直忙于工作,回家被看书的时间占用了.连续两个礼拜被频繁的足球篮球以及各种体育运动弄的精疲力竭,所以很少抽时间来写技术博客.今天抽出时间把backbon ...

  9. 一个类似backbone路由的纯净route ( 前端路由 客户端路由 backbone路由 )

    大家用backbone.angular,可能都习惯了内置的路由,这两个框架的路由都是非常优秀的,强大而简单. 客户端(浏览器)路由原理其实比较简单,其实就是监听hash的变化. 在之前的架构探讨中,说 ...

随机推荐

  1. Linux修改系统时间与时区

    GMT  (Greewich Mean Time) 格林威治标准时间:GMT是老的时间计量标准,根据地球的自转和公转来计算时间,也就是太阳每天经过位于英国伦敦郊区的皇家格林尼治天文台的标准时间就是中午 ...

  2. Linux 服务器 U盘安装(避免U盘启动)以及拔除U盘后无法引导系统

    一.U盘制作 首先下载两个文件: ·         rhel-server-6.3-i386-boot.iso    启动镜像 ·         rhel-server-6.3-i386-dvd. ...

  3. Servlet监听器的使用

    Servlet监听器的使用 制作人:全心全意 在Servlet技术中已经定义了一些事件,并且可以针对这些事件来编写相关的事件监听器,从而对事件做出相应的处理.例如,想要在Web应用程序启动和关闭时来执 ...

  4. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  5. 解决windows安装TensorFlow2.0beta版本时ERROR: Cannot uninstall 'wrapt'问题

    pip install -U --ignore-installed wrapt enum34 simplejson netaddr 参考:https://bugs.launchpad.net/rall ...

  6. Python-函数和代码复用

    函数的定义与使用 >函数的理解与定义 函数是一段代码的表示 -函数是一段具有特定功能的.可重用的语句组 -函数是一种功能的抽象,一般函数表达特定功能 -两个作用:降低编程难度 和 代码复用 de ...

  7. ZJU cluster

    * loginSSH using MobaXterm: >> ssh kaiming@10.106.239.105

  8. [bzoj3671][Noi2014][随机数生成器] (贪心+位运算+卡空间)

    Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M ...

  9. java 中序列化(Serializable)

    18年5月份,在毕业快一年的时候,我终于把自己从研发助理偏向行政打杂,偶尔写一些前端代码的处境,回归到了初衷-安安静静写前后端代码的小小程序员~过程中的心酸也就不在这里吐啦,毕竟我是小太阳,永不熄灭的 ...

  10. hdu 5037 模拟网选1006

    /* 模拟 实例: 33 1 10 5 5 2 10 3 3 6 1 3 2 1 1 4 2 1 1 5 2 1 1 6 2 1 1 7 2 1 5 20 8 1 2 3 4 5 1 20 8 5 0 ...