validatesの使い方


validatesの使い方

railsにてアプリケーション作成中でつまずいた箇所になるのでメモ。

こちらの記事を参考にさせていただきました。
https://qiita.com/clbcl226/items/af336ff06bfba4dacfd9

今回は長さの指定のみでしたが、他にもvalideatesの種類は多数あるので、
随時調べて行きます。

今回使用したvalidates

validates :カラム名, presence: true
→指定したカラムが空の場合にバリデーションをかける。

 #長さの下限を2文字に設定→minimum
 validates :カラム, length: { minimum: 2 }
 #長さの範囲を2-50文字→in ..
 validates :カラム, length: { in: 2..50 }
 #長さを5文字に指定→is
 validates :カラム, length: { is: 5 }

devise使用時の注意

今回、ログイン機能実装にdeviseを用いました。
その際Usersテーブル内のnameとpasswordを入力し、新規登録とログイン。
ログイン後に同じusersテーブル内にあるintroductionカラムにvalidatesをかけました。(以下)

validates :introduction, presence: true, length: {maximum: 50}

ここでpresence: trueとしてしまうとログイン時でもvalidatesがかかってしまい、
ログイン機能が動かなくなってしまいました。

なのでこちらを、presence: falseに変更
→空でも問題ないということなので、ログインも無事可能になりました。

ログインに影響出ないようにvalidatesするには

introductionにもpresenceのvalidatesをかける場合は、

validates :introduction, presence: true,
length, { maximum: 50 }, on: :update

もしくは、

with_options on: :update do
validates :introduction, presence: true,
length: {maximum: 50}
end

on: :updateと指定することでupdateアクション時のみのvalidatesとすることが可能。
※deviseのログイン時はデフォルトでcreateアクションが働いているようです。

以上、もし間違い等あればコメントいただけると幸いです。