Rails vaildationの使い方
29日目です。
本日チームで、ツイッターに似たアプリのエラー問題を解いている最中に、validationの存在を知りました。
エラー問題は下記です。
問.「投稿した画像と文章がデータベースに保存されないエラーを解決してください 」
解決方法は、「コントローラーのストロングパラメーターにimageが抜けており、imageキーを受け取れていないので、追加する」というものでした。
params.permit(:text)
↓
params.permit(:image, :text)
ただ、「なぜtextは書いてあるのに渡されなかった?」という疑問が生じて色々調べたのですが見つからず、メンターに聞いたところ「モデルにvalidationが設定されているから」とのことでした。
validationとは
作成者の意図する情報がモデルに送られてきたときに、データベースに情報を保存すし、それ以外の情報はシャットアウトするものです。具体的には、モデルに対し下記を設定します。
class Person < ApplicationRecord
validates :text, :image, presence: true
end
こうすることで、文章(text)と画像(image)が揃っている時だけデータベースに投稿した情報が記録されます。
今回のアプリでは、ある画像に対して自分のコメントをつけて投稿するという機能のため、文章(text)と画像(image)が揃って渡される必要があったということですね。
そのため今回のエラー問題では、tweet.rbというモデルにvalidationが設定されていたために、文章(text)だけではデータベースに情報が保存されなかったんですね。
validationをコメントアウトしたら、無事(?)文章(text)だけでもデータベースに保存ができました。
参照:
railsguides.jp
本試験合格点には未達でした。エラー問題、1つ解けないとその先も進まないので詰みました。No method errorの原因を必死で探りましたが、アソシエーションがきちんと組まれているかまで頭が回りませんでした。悔しすぎて10分くらい何もできず下をぼーっと見つめていました。途中で悔しいのは自分の未熟さを認めたくなかっただだけなのではと思いました。粛々とエラー問題を復習して再試験にチャレンジします。