嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,一樣有請今天的one piece:
(舊版七武海!)
昨天說完了 devise 的安裝,今天來說客製化的部分。
什麼意思呢?
假設我們昨天寫了rails g devise User
,那devise預設只會幫你建兩個欄位email
跟 password
如果你有其他了欄位要加,像是暱稱、個人簡介,那就要處理strong_parameters,而你也要在view裡新增你的表單欄位。
因為devise預設的sing_in
、sing_up
、account_update
只有允許預設的欄位往後台送,所以要去增加permit的欄位。
#在要更改強參數的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
可通過
快速的做法:
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 長出來後,去自定義你要做的事情
$ rails generate devise:controllers [:user]
# 其中 :user 可以換成你要連結的資料表(:admin 之類的)
此時,就會在app/controller/users/底下生出 sessions_controller.rb 這個檔案:
class Users::SessionsController < Devise::SessionsController
# GET /resource/sign_in
# def new
# super
# end
...
end
還會很貼心地告訴你要去路徑做設定!
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裡做設定
devise_for :users, controllers: { sessions: 'users/sessions' }
這樣就可以自定義出當使用者登入登出了時候要做什麼了~~
明天我們來說說 devise 的 view 跟 helper 吧!感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!