我想知道为发送到数据库的特定字段显示警告的最佳实现。
举个例子,有人提供被认为有效但有问题的数据。因此,我们希望将其视为第一次出现的常规验证错误,并确认它是用户实际想要输入的内容。此时,他们可以选择继续或更改输入的数据。如果他们选择继续,他们将获得批准,我们将在下一次试运行中跳过该验证。
然而(这是我不确定的部分),如果他们将该字段更改为可被视为有问题的另一个值,我们希望将它们带入同一个过程。请记住,这些是新记录,而不是已保留到数据库的记录。
通过基本条件验证可以实现这样的壮举吗?会有更好的选择吗?
只是为了澄清我的应用程序确切知道如何处理这些有问题的数据,但它的处理方式与普通数据不同,我们只是想提前通知用户并发出警告。
目前,验证是典型的自定义验证方法,用于指示对象的有效性。
validate :some_field_some_rules
def some_field_some_rules
if some_conditions_must_be_true
errors.add(:some_field, "warning message")
end
end
答案 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
...
我没有测试它,可能需要一些调整,但我相信这是一个好的开始!