--- title: 12th 鐵人賽 Day_16 devise strong_parameters & controller? (2) tags: 12th 鐵人賽 --- # 12th 鐵人賽 Day_16 devise ? (2) 嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,一樣有請今天的one piece: ![](https://i.imgur.com/eBti60s.jpg) (舊版七武海!) 昨天說完了 devise 的安裝,今天來說客製化的部分。 什麼意思呢? 假設我們昨天寫了`rails g devise User`,那devise預設只會幫你建兩個欄位`email` 跟 `password` 如果你有其他了欄位要加,像是暱稱、個人簡介,那就要處理strong_parameters,而你也要在view裡新增你的表單欄位。 ### strong_parameters 因為devise預設的`sing_in`、`sing_up`、`account_update`只有允許預設的欄位往後台送,所以要去增加permit的欄位。 #### 做法 ```ruby= #在要更改強參數的controller裡 def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_in) do |user_params| user_params.permit(:username, :email) end end ``` 直接將sign_in的user_params修改為`username`、`email`可通過 快速的做法: ```ruby= class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? # 這一行的意思是只有devise所生成的controller、才會在action前,執行configure_permitted_parameters protected def configure_permitted_parameters # 若你的欄位設計成巢狀的,也可以這樣設定! devise_parameter_sanitizer.permit(:sign_up, keys: [ :first_name, :last_name, address_attributes: [ :country, :state, :city, :area, :postal_code ] ] ) end end ``` ### 自定義 controller 你也可以把 controller 長出來後,去自定義你要做的事情 ```bash $ rails generate devise:controllers [:user] # 其中 :user 可以換成你要連結的資料表(:admin 之類的) ``` 此時,就會在app/controller/users/底下生出 sessions_controller.rb 這個檔案: ```ruby= class Users::SessionsController < Devise::SessionsController # GET /resource/sign_in # def new # super # end ... end ``` 還會很貼心地告訴你要去路徑做設定! ```shell= Running via Spring preloader in process 11485 create app/controllers/users/sessions_controller.rb =============================================================================== Some setup you must do manually if you haven't yet: Ensure you have overridden routes for generated controllers in your routes.rb. For example: Rails.application.routes.draw do devise_for :users, controllers: { sessions: 'users/sessions' } end =============================================================================== ``` 記得去routes.rb裡做設定 ```ruby= devise_for :users, controllers: { sessions: 'users/sessions' } ``` 這樣就可以自定義出當使用者登入登出了時候要做什麼了~~ 明天我們來說說 devise 的 view 跟 helper 吧!感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見! ![](https://i.imgur.com/PPbpd2b.gif)