※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
Validation(検証)
記事を作成・更新するときのルールを決めないといけない
validationとは、決められたルールどおりの入力になっているか検証するもの
主なvalidationの種類
Validation | 意味 |
---|---|
presence | 入力されているかチェック |
length | 長さをチェック |
uniqueness | 一意であるかチェック |
format | 正規表現と一致するかチェック |
numericality | 数字のチェック |
app/models/article.rbに追記していく
class Article < ApplicationRecord
# ここに書く
end
カラム「title・content」ごとに検証内容「validates
」を決めることができる
「未入力なら保存しません」
validates :title, presence: true
validates :content, presence: true
presenceは「存在する」の意味
- :titleにデータが存在していないとだめだよ
- :contentにデータが存在していないとだめだよ
「指定された長さ(文字数)を満たさないと保存しません」
minimum
で、最低限の文字数(長さ)を指定できるmaximum
で、最大限の文字数(長さ)を指定できる
validates :title, length: { minimum: 2, maximum: 100 }
validates :content, length: { minimum: 10 }
- :titleは2文字〜100文字に収まってないとだめだよ
- :contentは最低でも10文字ないとだめだよ
「同じものが他にある場合、保存しません」
同じものが複数あっては困るときに設定する
validates :content, uniqueness: true
同じ:contentは他にない?一意(ユニーク)であるか?
→ true なら保存される
- コピペ記事などを防止できる
- 同じユーザーアカウント名を避けられる
- 同じメールアドレスを避けられる 等
「特定のフォーマットと合ってないと保存しません」
こちらが入力してほしいもの(メールアドレス等)をちゃんと入力されているか確認する
例)タイトルの先頭に「@」があったらだめだよ
validates :title, format: { with: /\A(?!\@)/ }
バックスラッシュ「\」 → option + ¥
正規表現のチェック方法はツールで確認してみる
リンク:rubular(https://rubular.com/)
「\A」は先頭の文字を指定するときに使う
開発でよく使われる正規表現はネット上に公開されているので、がんばって覚えなくても大丈夫
独自のValidationを作る
複数のカラムをあわせたルールを独自で作成してみる
例):title
と:content
をあわせて、100文字以上ないとだめだよ
- 複数形じゃなくて、単数形
validate
と書くこと
→ これによってrailsの用意したvalidationじゃなくて独自作成したものと判断される validate_title_and_content_length
はprivate
で定義するunless char_count > 100
で、「もし100文字より大きくなかったら」と条件付けるerrors.add
で、どのカラムに対してvalidationを追加(エラー表示)するのか指定する- 表示させるエラー内容を書く
コードを書くとこうなる
validate :validate_title_and_content_length
private
def validate_title_and_content_length
char_count = self.title.length + self.content.length
unless char_count > 100
errors.add(:content, '100文字以上で!!')
end
end
private部分は↓でも
private
def validate_title_and_content_length
char_count = self.title.length + self.content.length
errors.add(:content, '100文字以上で!!') unless char_count > 100
end
charとはcharacterのことで、文字という意味
Validationに反したとき
- railsが用意したvalidationについては、railsが用意したエラー文言が表示される
- validateで独自に作成したvalidationのエラーについては、指定したエラー文言が表示される
エラーの表示方法についてはこちらも
#DAY12 #DAY18