ユーザー情報の更新ができない&バリデーションで止められるというエラーが起こった。
前提として、ユーザー情報の更新にパスワード入力を省くために以下を追記した。
registrations_controller.rb
def update_resource(resource, params)
resource.update_without_password(params)
end
しかし、以下2つの原因から更新できなかった
devise_parameter_sanitizer
:sign_upのときだけになっていたことが原因。
:account_updateを以下のように作成
application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :nickname])
devise_parameter_sanitizer.permit(:account_update, keys: [:email, :nickname])
end
モデルのバリデーション
以下のpresence: true によって「can’t be blank!」と警告された。
users.rb
with_options presence: true do
VALID_PASSWORD_REGEX = /\A(?=.?[a-zA-Z])(?=.?\d)\w{6,}\z/.freeze
validates :nickname,length: { maximum: 12 }
validates :password, format: { with: VALID_PASSWORD_REGEX, message: '半角6文字以上で英字と数字の両方を含めて設定してください' }
end
以下のように記述を変更
with_options presence: true do
VALID_PASSWORD_REGEX = /\A(?=.?[a-zA-Z])(?=.?\d)\w{6,}\z/.freeze
validates :nickname,length: { maximum: 12 }
with_options on: :create do
validates :password, format: { with: VALID_PASSWORD_REGEX, message: '半角6文字以上で英字と数字の両方を含めて設定してください' }
end
end
補足
on: :create(コントローラーのcreateアクションの時のみ動作する様にするオプション)
これにより、create(ユーザー情報変更時)は空欄でもOKになった!