前面講到 Restful Routes 設計很重要,今天就來簡單講一下基本的路徑Routes設定吧!
通常我們會在 config/routes.rb 的檔案裡面進行路徑的設定:
Rails.application.routes.draw do
get "/", to: "pages#index" #去首頁
get "/about", to: "pages#about" #去關於我們的頁面
# 動作 “路徑”, to: "controller#action"
end
一般設定就如上面這樣,會先指定動作,再來是要去的路徑,接著是對應的 controller,"#"後面是 controller 上面的 action。
這邊可以感受到慣例優於設定的一個小地方,使用 Rails 提供的 resources 方法非常方便,可以自動產生出對應的8條路徑、7種 action,可以應付一般 restful routes 設計
Rails.application.routes.draw do
resources :articles
end
可以開啟終端機輸入 rails routes -c articles
就會看到對應出來下面的這些路徑
$ rails routes -c articles
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
可以注意到我們這些路徑預設的action都是有意義的,一般來說會如下面的設計:
後面可以接上 _path
或 _url
後變成「相對應的路徑或網址」的 View Helper(幫忙view呈現資料的方法)。如果是站內連結,通常會使用 _path 寫法來產生站內的路徑,例如:
articles + path = articles_path => /articles
new_article + path = new_article_path => /articles/new
edit_article + path = edit_article_path(5) => /articles/5/edit
如果是使用 _url 則會產生完整的路徑,包括主機網域名稱:
articles + url = articles_url => http://sean_blog.com/articles
new_article + url = new_article_url => http://sean_blog.com/articles/new
edit_article + url = edit_article_url(5) => http://sean_blog.com/articles/5/edit
假設我們只需要用到 index 跟 show 呢?
可以使用 only
或 except
,only 是正向表示,表示內有的方法都要; except 反向表示除了提到的方法之外都要
Rails.application.routes.draw do
resources :articles, only:[:index, :show]
resources :articles, except:[:new, :create, :edit, :update, :destroy]
end
如果用單數resource
方法會產生沒有id的路徑,如果沒有要表示特定文章路徑就可以用這樣去產生,然後可以搭配only或except去選出那些路徑要用。
Rails.application.routes.draw do
resource :articles
end
$ rails routes -c articles
Prefix Verb URI Pattern Controller#Action
new_articles GET /articles/new(.:format) articles#new
edit_articles GET /articles/edit(.:format) articles#edit
articles GET /articles(.:format) articles#show
PATCH /articles(.:format) articles#update
PUT /articles(.:format) articles#update
DELETE /articles(.:format) articles#destroy
POST /articles(.:format) articles#create
下一篇再提供多一些關於路徑的設定部分給大家。
參考資料: