Ruby on rails 3 Rails 3验证只会触发一次,以模拟新记录上的警告

Ruby on rails 3 Rails 3验证只会触发一次,以模拟新记录上的警告,ruby-on-rails-3,validation,activerecord,Ruby On Rails 3,Validation,Activerecord,我想知道对于发送到数据库的特定字段显示警告的最佳实现是什么 举个例子,有人提供了被认为有效但有问题的数据。因此,我们希望将其视为第一次执行时的常规验证错误,并确认这是用户真正想要输入的内容。此时,他们可以选择继续或更改输入的数据。如果他们选择继续,他们将获得批准,我们将在下一次运行时跳过验证 但是(这是我不确定的部分),如果他们将该字段更改为另一个可能被认为有问题的值,我们希望让他们经历相同的过程。请记住,这些是新记录,而不是已经持久化到数据库中的记录 这样的壮举可以通过基本的条件验证来完成吗?

我想知道对于发送到数据库的特定字段显示警告的最佳实现是什么

举个例子,有人提供了被认为有效但有问题的数据。因此,我们希望将其视为第一次执行时的常规验证错误,并确认这是用户真正想要输入的内容。此时,他们可以选择继续或更改输入的数据。如果他们选择继续,他们将获得批准,我们将在下一次运行时跳过验证

但是(这是我不确定的部分),如果他们将该字段更改为另一个可能被认为有问题的值,我们希望让他们经历相同的过程。请记住,这些是新记录,而不是已经持久化到数据库中的记录

这样的壮举可以通过基本的条件验证来完成吗?还有更好的选择吗

我想澄清一下,我的应用程序确切地知道如何处理这些有问题的数据,但它的处理方式将不同于普通数据,我们只想提前向用户发出警告

目前,验证是典型的自定义验证方法,用于指示对象的有效性

validate :some_field_some_rules   


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

编辑后,让我们尝试使用自定义验证,该验证仅在需要时才会触发

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
因此,第一次调用create操作时,它将保存为
check\u problem=true
。如果有可疑值,我们将向ActiveRecord标准错误添加一个错误,并将
检查\u problem
设置为false。然后,您将重新呈现
新的
操作,但这次将隐藏的_字段设置为false

这样,当表单重新提交时,它不会触发
可疑的\u值\u验证


我没有测试它,可能需要一些调整,但我相信这是一个好的开始

不完全是这样,在用户看到警告之前,我不想保存记录。我还想将触发警告的业务逻辑定义为自定义活动记录验证,以便在第一次执行时将其视为典型的错误消息,并且我的代码的其余部分可以保持不可知性,而无需处理任何其他实例变量。为了清楚起见,我会更新我的问题。太好了,这正是我想要的。
f.hidden_field :check_questionable