奥が深いよ、validations

みなさん、validationsはご存知でしょうか?

少しでもrubyを勉強されている方は知っていますよね。

validationsは、ユーザーが入力したデータに対して、正しいデータのみDBに保存するメソッドのことです。

例えば、カラムに対して、文字を制限したり、入力が空だったら保存しないようにしたり、正規表現を使って、メールアドレスのフォーマットをチェックすることができます。これから自分でアプリを作る方は、必ずと言っていい程使用すると思いますよ!

記述する場所は、Modelのファイルになります。

記述方法は、ネットで検索していただければすぐに的確な書き方が出るので、参考にしていただければと思います。←ここで教えないのかよ...笑

 

では、今回なにをアウトプットするかと言うと、

validationsのエラーの確認方法です!

validationsの記述を間違えてしまうと、DBに保存ができないことが多々あります。それが、本日の私です...

チーム開発中で、最新のmasterをpullした途端、急にDBに保存ができなくなりました。

すぐに仮説を立てて、エラーに立ち向かいましたが、なかなか苦戦しました。

そこで、チームメンバーが記述してくれたvalidationsを確認することに。

 

まず、コントローラのアクションにbinding.pryして、ターミナルで確認

そこで、今日メンバーに教えてもらったコマンドの入力

下記の画像を参照ください

任意のタイミングでオブジェクトのバリデーションを行うメソッドです。

私の場合userなので、この後に.valid?  と追記すれば、validationsのエラーの確認ができます。1枚目のtrueが無事に保存できた場合です。

f:id:K-noblog:20190615212632p:plain

 

続いて、validationsによってDBに保存ができない場合です。

f:id:K-noblog:20190615214000p:plain

確認して見ると、falseと出ていますよね。

これは、エラーが起きていて、DBに保存ができていない状況です。

もし、falseが出てしまったら、.errors.full_messagesと入力すると、起きているエラーの内容も確認できます。上記参照。

 

これによって、どこの部分でエラーが起きているか確認できて、修正することができました。メンバーの方教えてくださってありがとうございます。

少し簡潔に文章を書いてしまいましたが、便利なので困った際は、ぜひ使ってみてください!!

もし間違いやご質問があれば、ぜひぜひお答えさせていただきます。