Railsモデルの検証を取得する
-
05-07-2019 - |
質問
model_name.rbファイルに検証があるモデルがある場合、それらの検証に手動でアクセスするにはどうすればよいですか?組み込みのRailsトリックと連携して動作する独自のフォーム検証システムを作成したいので、可能な限りすべてをドライに保ちたいと思います。私の主な問題は、フォームの値がデータベースに到達する前にサーバー側の検証を行う必要があることです(マルチステップフォームを使用しています)。
基本的に私は
のようなメソッドがあるかどうか疑問に思っていますUser.validations.each do |v|
puts v.constraint.to_s + " " + v.message
end
これに似たものはありますか?
事前に感謝します。
解決
私の主な問題は、私が作る必要があることです いずれかの前のサーバー側の検証 フォームの値はデータベースにヒットします(私は マルチステップフォームを使用します)。
クラスファイルの検証に従ってモデルが有効でない場合、データはデータベースに保存されません( false
を save
検証を抑制するメソッド)。
- モデルの
valid?
/invalid?
メソッドを呼び出すことで、いつでもモデルが有効かどうかを確認できます。
他のヒント
ActiveRecordオブジェクトは、有効な後にerrorsメソッドを公開しますか?が呼び出され、どの検証に違反しているかに関するメッセージが表示されます。有効か確認できますか?次に、現在のフォームの一部のフィールドが無効かどうかを確認します。 field1およびfield2フィールドを持つフォームに対してこのようなことを行うことができます
unless x.valid?
[:field1,:field2].each do |field|
yes_there_was_an_error if x.errors[field]
end
end
最善の方法は、ステートマシンを使用して、フォームのさまざまなステップ間でデータベースにデータを保存することです。
次のことができます。 validates_presence_of:username、:if => proc {| u | u.signup_step> = 2}
、ここで signup_step
はデータベースの整数列です。
だから、フォーム間でデータベースに保存したくないと言っても、そうすべきだと思います。これを行うと、厄介なハッキングなしで、通常の検証とモデルを使用できます。そして、正直なところ、この方法でそれを行うのは問題だと思います。