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 1 year has passed since last update.

Validationについて

Last updated at Posted at 2023-02-24

Validationの意味
検証

データを保存する前にこのデータを保存しても、良いのか悪いのかを検証するもの。

長さに関するValidation

app/models/article.rbに記入

  validates :title, presence: true
  validates :content, presence: true

現在は、これが記入されています。

length

長さを指定するValidation  例 タイトル何文字以上で記入してください。 記事を何文字以上で書きなさい。 などの長さを指定するときにlengthを使用する。

〜以上にする場合

validates :title, length: { minimum: 2 }

validates :カラム名, length: { minimum: 2 }
最低2文字以上ないとダメですという意味

rails sで、サーバーを再度立ち上げる。

その後動作確認すると、タイトルは2文字以上で入力してください!となる♪
2文字以上にすると保存ができました🙆

例えば、contentを10文字以下にしたい場合は、

validates :content, length: { minimum: 10 }

このようになります。

〜以内にする場合は、

validates :title, length: { maximum: 100 }

100文字以内となる。

○まとめ

Validationのlengthは、長さを指定るするものです。

uniqueness

同じ内容である場合は、困るときに使える👍

例:投稿内容が、全く同じである場合は、エラーを起こす。

validates :content, uniqueness: true

この状態で、試すと
内容はすでに存在します。と出てきます🙆

よく使う場面
ユーザーアカウント名、メールアドレス など

format

特定の表現に対してValidationをかける。 こういった表現でないとダメですよ〜という感じ! 例:@で始まるテキストでないとダメですよ (@がついて.~でないとダメだよ) テキストの形を指定するもの

https://rubular.com/
で試してみてください👍
Rubyの正規表現

\A\@

となると先頭に@がついていないと合致しない

\A(?!\@)

@から始まらないが合致する

validates :title, format: { with: /\A(?!\@)/ }

こうすると、@で始まった場合
タイトルは不正な値ですと出力されました。

emailなどよく使うものの場合は、わからなければ検索すると表現の仕方が出てきます👍
「email ruby 正規表現」

独自のValidationを追加する方法

例えばtitle,contentの合計がいくつ以下にしなさいというルールを作るとする。

複数のカラムを参照してルールを作るのは、railsで用意されていない!!

自分でルールをつくる!

validate :validate_title_and_content_length

※sがない

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

自分で定義をする。(100以上)
※char:読み:キャラクター 、意味:文字
※char_count:文字数

erros.add(:カラム )
このカラムにエラーを追加しますよという意味

Validationは何かのカラムに対して、アラート、エラーを起こすためのもの

これで100文字以下で、投稿しようとすると
内容は、100文字以上で!!と出力されました!!
※内容は=content content を日本語にしたもの

 private
 def validate_title_and_content_length
    char_count = self.title.length + self.content.length
    errors.add(:content, '100文字以上で!!') unless char_count > 100
  end

一行で書くこともできる!

errors.addとは??
app/views/articles/_form.html.haml

article.errors.full_messages

ここでメッセージ全て表示している!

Validationでエラーが起こったときに、errorsに何か追加される。
その追加されたメッセージを表示しているのがここ!

validatesの場合、失敗したら勝手にerrors.addに追加している。

validateで、自分たちでエラーを追加した場合は、そこも自分たちで追加しないといけない!!よって、errors.addで追加していることになる😆

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?