0

データベースに送信されている特定のフィールドの警告を表示するための最適な実装は何でしょうか。

例を挙げると、誰かが有効と見なされるが疑わしいデータを提供しています。そのため、最初は通常の検証エラーであるかのように扱い、ユーザーが実際に入力したいものであることを確認します。この時点で、入力するデータを続行するか変更するかを選択できます。続行することを選択した場合は、ゴーサインが与えられ、次の実行時にその検証をスキップします。

ただし(これは私にはよくわかりませんが)、そのフィールドを疑わしいと見なすことができる別の値に変更した場合は、同じプロセスを実行したいと思います。これらは新しいレコードであり、データベースにすでに永続化されているレコードではないことに注意してください。

そのような偉業は、基本的な条件付き検証で達成できますか?より良いオプションはありますか?

アプリケーションがこの疑わしいデータの処理方法を正確に知っていることを明確にするために、通常のデータとは異なる方法で処理されるため、事前に警告をユーザーに通知したいと思います。

現在、検証は、オブジェクトの有効性を指示する典型的なカスタム検証メソッドです。

validate :some_field_some_rules   


def some_field_some_rules
    if some_conditions_must_be_true
      errors.add(:some_field, "warning message")
    end
end
4

1 に答える 1

2

編集しました。必要なときにのみトリガーされるカスタム検証を試してみましょう。

class MyModel < ActiveRecord::Base

  attr_accessor :check_questionable
  validate :questionable_values_validation, on: :create, if: Proc.new { |m| m.check_questionable }

  def initialize
    check_questionable = true
  end


  private
  def questionable_values_validation
    if attribute1 == "Questionable value"
      self.errors[:base] << "Attribute1 is questionable"
      check_questionable = false
    end
  end

end

次に、作成フォームをレンダリングするときに、必ず check_questionable の hidden_​​field を追加してください。

f.hidden_field :check_questionable

そのため、最初に create アクションを呼び出すと、 で保存されcheck_questionable = trueます。疑わしい値がある場合、ActiveRecord の標準エラーにエラーを追加し、check_questionablefalse に設定します。その後、アクションを再レンダリングしnewますが、今回は hidden_​​field を false に設定します。

このようにして、フォームが再送信されたときにトリガーされませんquestionable_values_validation...

私はそれをテストしませんでした。微調整が必​​要かもしれませんが、良いスタートだと思います!

于 2012-10-05T22:15:20.983 に答える