0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

deviseでユーザー情報の編集ができない!〜update_resourceしたらココを見よう〜

Posted at

ユーザー情報の更新ができない&バリデーションで止められるというエラーが起こった。

前提として、ユーザー情報の更新にパスワード入力を省くために以下を追記した。

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になった!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?