Route 就是整個網站的路徑,在MVC的架構底下 Rails 會依照使用者從瀏覽器傳到伺服器的網址以及一包的參數後透過根據結果,去找到相對應的 Controller 跟 Action。
Rails.application.routes.draw do
get “/user”, to: “users#index”
end
看到上面設定的路徑 /user
Rails 會去找到 UsersController 裡面的 index Action
class UsersController < ApplicationController
def index
end
end
找到 Controller 跟 Action 後,Rails 來到了 views 資料夾找相對應的 html 檔案後傳送回去給你的瀏覽器
app > views > users > index.html.erb
<h1>home page</h1>
<p>this is home page</p>
一般最簡單的路徑設定方法就是在直接使用resources
你就會有下圖這些路徑跟發法可以使用,而resource
的路徑會跟下圖一樣但是沒有:id
當然也可以一層包一層做出符合你當下需求的路徑,member
跟collection
也是你可以使用的資源,可以寫成下面這個routes,member
會有:id
而collection
沒有
resources :users do
collection do ( collection 可換成 member )
get :new
post :create
end
end
你也可以使用resources
包住resources
就會產生下圖這些路徑可以使用,讓你的路徑看起來會有索引的感覺。但是這也是會有缺點,如果某些路徑是你不想給使用者看到的話,使用者會更容易透過直接修改路徑進入到那些你不想給他們看到的網頁(你沒有做好保護的話),例如看到其他使用者的資料。
resources :users do
resources :posts
end
路徑要也是一種資源,要設計的好也是需要磨練的。
現在許多Web服務或框架都支援REST的架構,REST全名REpresentational State Transfer。REST架構由客戶端/伺服端組成,之間的通訊機制是無狀態的,客戶端對伺服端請求資源,伺服端回應資源,或稱為表現方式。
也就是說,資源在REST中是可定址的(Addressed)概念,是獨一無二的,可能用檔案、文件、格式等型態來表現,代表資源目前或可能的狀態。客戶端獲取的狀態,可能包括下次狀態轉移的連結,因此選擇動詞必須能表現出如何處理請求。
最常使用的動詞 get、post、put、patch 以及 delete
Rails 裡執行 GET 不會檢查 CSRF token。永遠不要讓 GET 請求可以執行資料庫寫入動作,更多資訊請參考《安全指南》 關於 〈CSRF countermeasures〉 一節。