Rails 3验证只触发一次以模拟新记录的警告

时间:2012-10-05 22:07:22

标签: 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

1 个答案:

答案 0 :(得分: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_questionable设置为false。然后,您将重新呈现new操作,但这次将hidden_​​field设置为false。

这样,当重新提交表单时,它不会触发questionable_values_validation ...

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

相关问题