質問

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 はデータベースの整数列です。

だから、フォーム間でデータベースに保存したくないと言っても、そうすべきだと思います。これを行うと、厄介なハッキングなしで、通常の検証とモデルを使用できます。そして、正直なところ、この方法でそれを行うのは問題だと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top