RESTful 接口定义 |
位置 | /config/route.rb |
resources方法 | resources :names [,...] 可以同时制定多个 例: resources :sample1, :sample2, ... 注: 控制器名为复数 |
由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 |
重复的共有化 | 提取重复部分 使用 # 单个
resources :messages, concerns: :commentable
# 多个时用数组, 按数组顺序展开
resources :articles, concerns: [:commentable, :image_attachable]
# 可以展开在任何位置
concerns :sample ● 参数 例 # 只提取具体方法
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地址 ● 例 | action | 运行的控制器与方法 ● 例 ● 路径与方法一样时可以省略后半部分 ● 也可以路径和处理的方法分开, 后者用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' |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |