質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

1151閲覧

Rails ユーザー情報の編集機能でパスワードの変更は任意にしたいが、半角スペースのみ入力された場合に制限したい

alphaha

総合スコア1

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

2クリップ

投稿2021/04/15 06:44

編集2021/04/15 06:57

前提・実現したいこと

Ruby on Railsでdeviseを使用し、ユーザー情報の編集機能を実装しています。以下、編集項目です。

  • 名前
  • メールアドレス
  • パスワード
  • パスワード(確認)

パスワードの変更は任意にし、入力されなかった場合はそのままユーザー情報を更新。
パスワードが入力された場合はパスワードの検証をし、バリデーションを通過した場合はパスワードを更新するようにしたのですが、半角スペースのみ入力された場合にそのまま通り編集完了画面に遷移(この時パスワードの更新はされないです)してしまいます。半角スペースのみが入力された場合にも入力を検証されるようにしたいのですが解決方法がわかりません。
ご教授をお願いします。

該当のソースコード

ユーザー情報編集時には、パスワードの入力を任意にできるよう、パスワードのバリデーションをon: :createon: :updateで分けています。

Ruby

1class User < ApplicationRecord 2 3... 4 5VALID_PASSWORD_REGEX = /\A[a-z\d]{8,100}+\z/i 6validates :password, presence: true, confirmation: true, format: { with: VALID_PASSWORD_REGEX }, on: :create 7validates :password, presence: true, confirmation: true, format: { with: VALID_PASSWORD_REGEX }, allow_nil: true, on: :update 8 9...

試したこと

NULL は許可するが空文字や空白文字は許可しないようにバリデーションを実装する

この記事を参考にパスワードのバリデーションを

Ruby

1validates :password, format: { without: /\A[[:space:]]*\z/, allow_nil: true }, on: :update

のようにし、パスワードの未入力は許容し、スペースが入力された場合はそれを検証するようにしてみたのですが、半角スペースに反応せず、編集完了画面に飛んでしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

devise は空文字を nil に変換してからモデルに渡すので、モデル側のバリデーションだけでは、表題の機能を実装できません。

Devise::RegistrationsController を継承してカスタマイズする、などの対応が必要になってくると思います。
heartcombo/devise#configuring-controllers | Github

そもそも、
「半角スペースのみが入力された場合、パスワード未入力とみなし、パスワードを更新しない」
という動作だと何か困るんでしょうか?

投稿2021/04/16 03:04

shinoharat

総合スコア1676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問