私はこのバグのトラブルシューティングを行っており、最終的にその原因を発見しました。私はいつも、私はmy_object.save(false)は本当にアクティブレコードの検証をスキップしません
@my_model.save(false)
を呼び出したときに、私は私のActiveRecordの検証をスキップしだろうという印象の下にありました。これは部分的に真実であることが分かります。私のオブジェクトはデータベースに保存されています私のActiveRecordの検証を DESPITE。私の検証では、検証プロセス中に子どものモデルの1つが修正されるため、問題が存在します(これは24時間ロケーションのスケジュールアプリケーションなので、ランチが保存されると、保存日と翌日チェックされます)
私の質問はこれです:実際に検証をスキップしてデータベースに直接移動する方法はありますか?これは通常のActiveRecordの動作ですか、それともユーザーが「2am」を意味するのかを確認することです。または私の妥当性検証の深いところでダイビングする必要がありますか?または私は幸運から私の検証を書き直す必要がありますか?
を使うんこれは、検証でモデルを変更するため問題になります。私は、検証以外の何かを使ってデータをサニタイズするだろう。 – bhollis
それはまさにそれです!私はそれが私の究極の答えだと推測していますが、私は別のものを見つけることができるかどうか私の運を試すと思いました。 – BushyMark
バリデーションを使用してビジネスオブジェクトを後処理することは間違いなく匂いです。バリデーションはデータをチェックするためのものであり、変更するものではありません。変更するには、Before/After-Save、Before/After-Createなどの様々なActiveRecordライフサイクルフックを使用してください。 – Matthias