Sessions controller
登入和登出的功能會由 Sessions controller 相對應的 actions 處理:
- 登入表單由
newaction 處理 - 登入的過程是透過向
createaction 發送 POST 請求 - 登出的過程是透過向
destroyaction 發送 DELETE 請求
現在來建立 Sessions controller 和 new action:
$ rails generate controller Sessions new
因為加了 new 參數,會同時幫你建立相對應的 view,但 create 和 destroy 不需要 view,所以沒加上去。
我們要建立一個登入表單以創建一個新的 session,架構如下:

Users resource 使用了 resource 方法自動建立完整的 RESTful 路由,不過 Sessions resource 不必這麼完整,它只需要具名路由(named routes):
login_path用來處理 GET 和 POST 請求logout_path用來處理 DELETE 請求
完整路由設定如下,同時我們也刪除不需要的路由設定:
config/routes.rb
Rails.application.routes.draw do
root 'static_pages#home'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
resources :users
end
產生的路由架構如下:
| HTTP request | URL | Named route | Action | Purpose |
|---|---|---|---|---|
| GET | /login | login_path | new | page for a new session (login) |
| POST | /login | login_path | create | create a new session (login) |
| DELETE | /logout | logout_path | destroy | delete a session (log out) |
可以使用 rake routes 查看目前所有的路由規則:
$ bundle exec rake routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
signup GET /signup(.:format) users#new
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy