こんにちは、エンジニアにょけん(@nyoken_box)です。
Railsのdeviseで会員登録機能などを実装する場合、ユーザーの入力項目にある程度の制限を設けるとサービスの質が高まります。
例えば、
- 名前が空欄では登録できない
- パスワードは8文字以上
- メールアドレスには「@」がつく
これらを満たしていない場合にエラーを返した方が、サービスとして適切です。
もしメールアドレスに「@」がない状態で登録できてしまったら、肝心のメールが送れませんからね。
というわけで、これらのチェックを実装する方法を紹介します。
※今回はdeviseでUserというモデルを作成した場合を想定しています。
presenceで、「そもそも入力されているか?」の検証
“presence”は、「項目に入力がされているか」を検証できます。
例えばnameという項目に入力があるかを検証したければ、街灯のモデルファイルに以下ピンク色のコードを記載しましょう。
app/models/user.rb
class User < ActiveRecord::Base validates :name, presence: true end
validates
メソッドにpresence: true
という引数を与え、name
という項目を検証してす。
lengthで、長さの指定
入力させる内容に、「○文字以下」という指定を付けたい場合があると思います。
lengthを用いると、カンタンに実装できますよ。
emailに「50文字以下」という制限を設ける場合、以下ピンク色のコードを記入しましょう。
app/models/user.rb
class User < ActiveRecord::Base . . . validates :email, length: { maximum: 50 } end
deviseの場合、パスワードはデフォルトで「6〜128文字」で制限がかけられています。
こちらは、「config/initializer/devise.rb」にて変更できます。
ファイルの中ほどに、「config.password_length」という項目があるため、こちらの数字を任意の長さに変えましょう。
emailの検証
「メールアドレスに@が含まれるか」「メールアドレスに重複がないか」などの最低限の検証は、実はdevise側ですでに実装してくれています。
便利!
自分で実装する場合は「format」というものを用いるのですが、正規表現などの知識が必要なので高難易度です。
deviseに甘えておきましょう。
コメント