在 rails 的路由世界裡,有著非常厲害的的管理方式
當用戶端 client
做了什麼任何 http 請求 request,請求動作像是post
這樣的一個行為
會透過 rails 的 routes.rb
做一個解析
然後丟給 controller 去做判讀,再幫助使用,得到特定的畫面
當你在 routes 裡面設定:
- resources ,就會自動添加 7 個action ,也同時擁有 8 個 path
- resource ,就會不會有
#index
和#show
- 當我想要特殊路徑,或者一個特別操作處理?就得使用
collection do
,member do
- 如果我想要創建一個,判別的後台路徑,那我可以用
namespace
什麼是 collection do ?
舉一個例子,在購物車裡面,刪除整個購物清單
1 | resources :carts do |
就是對於 指定resources
內,複數集合
,做什麼 http-veb
這樣 rails 會去找 carts_controller
,並指向 clean
這個 method
這樣的路徑結果,不會有 id
Helper | HTTP verb | path | Controller#Action |
---|---|---|---|
clean_carts_path | DELETE | /carts/clean(.:format) | carts#clean |
什麼是 member do ?
舉一個例子,想要將該產品,單一加入購物車
1 | resources :products do |
就是對於 指定resources
內,單數集合
,做什麼http-veb
這樣 rails 會去找 products_controller
,並指向 add_to_cart
這個 method
這樣的路徑結果,會有 id
,因為必須要是指定的產品
Helper | HTTP verb | path | Controller#Action |
---|---|---|---|
add_to_cart_product_path | POST | /products/:id/add_to_cart(.:format) | products#add_to_cart |
簡單定義 namespaces ?
1 | namespace :admin do |
網址會產生 /admin/products
其實就是一個綽號的概念,
在台灣追星的粉絲門,會喜歡模仿偶像
所以常常自稱是 土城李宗盛
,三重劉德華
這樣的稱號出現土城
,就是一個區別,沒特別意義,讓你一眼就知道土城人李宗盛
,就是代表,你也是做很多壞事進監獄
不是啦!那是李宗瑞
…XDDDDD,李宗盛,是唱歌很有老人韻的李宗盛
,劉德華
就是指擁有什麼厲害的能力(功能),或者外表(介面)
網站前台,創建一個 product_controller
,控制 product index 的介面
當我們想要區別前台和後台,讓admin 下也有一個 product_controller
,控制 product index 的介面
而 namespaces
的用法就是一種區別的方式!
Ref:
【豆知识】 routes.rb中: resources 、namespace、member 和 collection的使用区别
極推薦:
為你自己學 Ruby on Rails