iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0

在使用resources方法之前,我們先來利用最簡單的方式來做路徑

簡單Route製作

Rails的路徑管理都會在config/routes.rb這個檔案裡
https://ithelp.ithome.com.tw/upload/images/20191007/20120947cLUdcYTyZC.png

先在routes.rb來製作一條簡單的路徑

Rails.application.routes.draw do
 get '/welcome', to: 'welcome#index'
end

存檔之後可以用$ rails routes檢視目前所有的路徑,或者是從路徑對照表裡面看到我們剛製作的路徑

$ rails routes
Prefix Verb URI Pattern                 Controller#Action
welcome GET  /welcome(.:format)         welcome#index

...(略)

這時候啟動sever就會出現這樣得錯誤訊息畫面,但是別緊張~這樣的畫面是正常得!
如果Routing Error錯誤訊息是出現:No route matche...可能就要注意一下是否有問題
https://ithelp.ithome.com.tw/upload/images/20191007/20120947fknE2wAiCO.png

接下來快速的welcome做一個Controller給他 $rails g controller Welcome

$ rails g controller Welcome
Running via Spring preloader in process 43234
      create  app/controllers/welcome_controller.rb
      invoke  erb
      
...(略)

並且在剛所建立的controller檔案app/controllers/welcome_controller.rb裡寫上

class WelcomeController < ApplicationController
  def index
    render html: 'welcome'
  end
end

就可以在網站上成功顯示welcome字樣了!
以上這就是最簡單製作route的方式。
/images/emoticon/emoticon34.gif


可是這樣每次都要一條一條做,那當你網站不再單純只有首頁
也許你可以直接考慮使用resourses

Resourses

符合RESTful(Representational State Transfer)的網址設計,就是使用使用Rails提供的 resources方法。

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

利用resources方法所做的路徑,從路徑對照表來看,會發現它幫忙產生「八條路徑,七個方法」,不只首頁的頁面,就連新增修改刪除等等都幫我們建立完成了!都這麼方便了,還要一條一條建立嗎?

$ rails routes
           Prefix     Verb URI Pattern          Controller#Action
welcomes      GET     /cats(.:format)           cats#index
              POST    /cats(.:format)           cats#create
new_welcome   GET     /cats/new(.:format)       cats#new
edit_welcome  GET     /cats/:id/edit(.:format)  cats#edit
welcome       GET     /cats/:id(.:format)       cats#show
              PATCH   /cats/:id(.:format)       cats#update
              PUT     /cats/:id(.:format)       cats#update
              DELETE  /cats/:id(.:format)       cats#destroy

不過在這裡要注意,當複數得resources寫成單數resource只會出現「七條路徑,六個方法」,而且跟複數resources比較之下,會發現除了每有index的路徑,它也沒有:id這個方法。

$ rails routes
           Prefix     Verb URI Pattern       Controller#Action
new_welcome   GET     /cats/new(.:format)    cats#new
edit_welcome  GET     /cats/edit(.:format)   cats#edit
welcome       GET     /cats(.:format)        cats#show
              PATCH   /cats(.:format)        cats#update
              PUT     /cats(.:format)        cats#update
              DELETE  /cats(.:format)        cats#destroy
              POST    /cats(.:format)        cats#create

Resourse的only & except

當然resources也不是每次都一次建立那麼多路徑,可以用only選擇你要的,或者是 except你不要的來做變化,看以下範例:

only只要...的路徑

Rails.application.routes.draw do
  resources :cats, only:[ :index, :new ]
end

# 路徑對照表只會顯示index,new的路徑
       Prefix     Verb URI Pattern       Controller#Action
cats      GET     /cats(.:format)        cats#index
new_cat   GET     /cats/new(.:format)    cats#new

except除了...以外的路徑

Rails.application.routes.draw do
  resources :dog, except:[ :index, :create, :update ]
end

# 路徑對照表只會顯示,除了index,create,update以外的路徑

       Prefix     Verb URI Pattern        Controller#Action
 new_dog  GET     /dog/new(.:format)      dog#new
edit_dog  GET     /dog/:id/edit(.:format) dog#edit
     dog  GET     /dog/:id(.:format)      dog#show
          DELETE  /dog/:id(.:format)      dog#destroy

什麼時候要使用only或是except?其實only或是except這樣得方法,其實使用方式就完全看你怎麼規劃網站的內容來決定了。(這段根本廢話無誤呀


上一篇
Day21 | nil? empty? blank? present?
下一篇
Day23 | Flash快閃訊息
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言