Rails5 Route Document

创建: 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'
  
  
  
  
  
  
  
  
  
  
  
  
  
  

 

转载于:https://www.cnblogs.com/lancgg/p/8281776.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值