iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
Modern Web

Ruby新手村的礦工日記系列 第 20

[ Day 20 ] Rails : 迷路了?先問問 Route 吧!(中)

  • 分享至 

  • xImage
  •  

上一章介紹了 routes 的工作環境,以及淺談了 RESTful 。
今天要來介紹好用的方法,讓你不用寫一堆網路請求的路徑。

資源 Resource

上一章有提到 Rails 是依照 RESTful 的方式去設計網址,除了一條一條寫外,其實可以使用 Rails 提供 resources ,以貼文為例:

Rails.application.routes.draw do
  resources :posts
end

當在 routes.rb 裡面寫這段之後,它會自動幫你生成 8 條路徑。
在終端機輸入 rails routes -c posts ,會出現以下:
posts 路徑圖
這邊幫大家整理成一個表格讓大家更清楚這 8 條路徑是在做什麼的:
動詞 | Prefix | 路徑 | Controller | Action | 說明
------------- | -------------
GET | posts | /posts | PostController | index | 全部貼文列表
POST | posts | /posts | PostController | create | 新增貼文
GET | new_post | /posts/new | PostController | new | 新增貼文頁面
GET | edit_post | /posts/:id/edit | PostController | edit | 編輯貼文頁面
GET | post | /posts/:id | PostController | show | 檢視單一貼文
PATCH | post | /posts/:id | PostController | update | 更新貼文
PUT | post | /posts/:id | PostController | update | 更新貼文
DELETE | post | /posts/:id | PostController | destroy | 刪除貼文

我不要這麼多路徑

雖然 resources 可以產生 8 條路徑,但是可能有些路徑是不需要的,這時你可以篩選一下:

Rails.application.routes.draw do
  resources :products, only:[:index, :show]
end
Rails.application.routes.draw do
  resources :products, except: [:new, :create, :edit, :update, :destroy]
end

其實上面這兩種的意思都是說,我只要 index, show,其他的我都不要。
只是表達的方式不一樣,但都會產生以下的路徑:
products 路徑

什麼時候要用 only 什麼時候要用 except
老實說,看你方便,以上面的例子,你應該知道要用哪一個吧!
我是會選 only ,因為字數比較少,比較省時間。

單數 resource

單數與複數的 resources 有什麼差別呢?
差別在於複數的有 :id,複數的沒有 :idindex,如下:

Rails.application.routes.draw do
  resource :profile
end

產生的路徑如下:
單數 resource

巢狀式路徑

當某一個 resources 包住另一個 resources 時,例如:

Rails.application.routes.draw do
  resources :magazines do
    resources :ads
  end
end

它會產生以下的路徑:
大包小

shallow

使用者可以檢視、新增 posts。
文章擁有者可以顯示、編輯、刪除 posts。

Rails.application.routes.draw do
  resources :users do
    resources :posts, only: [:index, :new, :create]
  end
  resources :posts, only: [:show, :edit, :update, :destroy]
end

路徑會變這樣:
有限制大包小
但是你也可以使用 shallow: true ,這樣也有一樣的效果。

Rails.application.routes.draw do
  resources :users do
    resources :posts, shallow: true
  end
end

關於路徑更多用法,下一章會在提供給大家!

參考資料:

  1. 為你自己學 Ruby on Rails
  2. [Rails] routes 的使用
  3. Rails Guides

上一篇
[ Day 19 ] Rails : 迷路了?先問問 Route 吧!(上)
下一篇
[ Day 21 ] Rails : 迷路了?先問問 Route 吧!(下)
系列文
Ruby新手村的礦工日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言