LoginSignup
1
0

More than 3 years have passed since last update.

Ruby on Rails ログイン機能のバリデーション設定

Last updated at Posted at 2020-10-11

Userモデルのname,emailカラムにバリデーションを設定

Railsガイドなどを参考にしています。
https://railsguides.jp/active_record_validations.html

【やりたいこと】
・名前やメールアドレスは空欄で登録できないようにする
・名前とメールアドレスの文字数制限

ポイントは
①"presence: true"→空欄での登録を禁止する
②"length: { maximum: }" → ":"の後ろに設定した数字以上の長さを禁止する

app/models/user.rb ファイルでの作業になります。
作成したのは下記のコード。

class User < ApplicationRecord
  validates :name,  presence: true, length: { maximum: 20 }
  validates :email, presence: true, length: { maximum: 300 },
end

うまくいっているか、Rails consoleで確認してみる。まずは空欄で登録しようとすると。。。

> User.create(name: "", email: "")
   (0.3ms)  BEGIN
   (0.4ms)  ROLLBACK
 => #<User id: nil, name: "", email: "", created_at: nil, updated_at: nil>

ROLLBACKして登録されていません。

そして長い名前やメールアドレスを登録しようとしてみると、これもROLLBACKしていることが分かります(email欄の...となっている部分はあまりに長いので記事での表示を省略しています)。

> user = User.create(name: "a"*25 , email: "b"*350 + "@test.com")
>  (0.3ms)  BEGIN
>  (0.4ms)  ROLLBACK
=> #<User:
     id: nil,
     name: "aaaaaaaaaaaaaaaaaaaaaaaaa",
     email:"aaaaaaaaaaaaaaaaaaaaaaaaa...@test.com",
     created_at: nil,
     updated_at: nil>

エラーの理由を表示すると。。。

> user.errors.messages
> {:name=>["is too long (maximum is 20 characters)"],
 :email=>["is too long (maximum is 300 characters)"]}

"length: { maximum: }"がちゃんと機能していることが確認できました。

ちなみにmaximumとなっている部分は、いろいろ応用して使えるようです。
(下記Railsガイドより)

class Person < ApplicationRecord
  validates :name, length: { minimum: 2 }
  validates :bio, length: { maximum: 500 }
  validates :password, length: { in: 6..20 }
  validates :registration_number, length: { is: 6 }
end

:minimum: 属性はこの値より小さな値を取れません。
:maximum: 属性はこの値より大きな値を取れません。
:inまたは:within: 属性の長さは、与えられた区間以内でなければなりません。このオプションの値は範囲でなければなりません。
:is: 属性の長さは与えられた値と等しくなければなりません。
1
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
1
0