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アクションが働いているようです。
以上、もし間違い等あればコメントいただけると幸いです。