■validateのタイミングはいつか?
1.save
save!にして置くと、notNullなのにNullになっていたりすると、個々でエラー
2.validate系
検証が行われる。よって、save!にすると、そっちのエラーが先に働く
3.before_create
ここでフックが起動。よって、ここでハッシュパスを発行するのに、検証で、ハッシュパスの存在
を確認すると、検証にひっかっかる。
【追加 値が入るタイミング】
ちなみに、正常処理の際には、validateの状態であっても値はセットされているので安心してください。
例えばこの例。
def validate if self.held_date_time < Time.now self.errors.add(:held_date_time,"面接日時が現在より前です") end no_clash_with_other_interview?() end def no_clash_with_other_interview?() p self.interviewer.family_name end
ここで、self.interviewerがセットされていない場合はNULLになるが、きちんとPOSTされていれば
値は取り出せる。
しかし、presenceをしても検証は先に働かないので、self.interviewerがNULLの場合のエラーは
validate内に書かないといけない。
【追加2 モデルが外部キーを含んでいる場合】
POSTしてsaveする際に、おそらく外部キーのモデル.validも調べられる。
よって、外部キーのモデルとしてnilを入れると、エラーする。当然、validateでそれを検出しても
無理。その前にエラーするから