Rails5 Route Document

建立: 2017/06/29json

完成: 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
數組

 路徑類內部能夠帶參數, 表示請求的參數app

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, ...post

 注: 控制器名爲複數url

 

 參數  
 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. 沒有單獨展現(一共就一個)spa

 注: 控制器名爲複數命令行

 

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}/}code

 注: Controller爲TestControllerorm

 限制類
 制約クラス
 用正規表現沒法實現的複雜限制用限制類
 要求  包含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'
相關文章
相關標籤/搜索