我的自定义验证在客户端无效。谁能明白为什么? 未调用validate_each。它直接在模型中获取named_regexp的错误消息。
// app/validators/named_regexp_validator.rb
class NamedRegexpValidator < ActiveModel::EachValidator
ERROR_MESSAGE = "Regexp group names are required"
def check_validity!
unless valid_groups && valid_groups.kind_of?(Array) && valid_groups.any?
raise ArgumentError, ERROR_MESSAGE
end
end
def validate_each(record, attribute, value)
if value.present?
regexp = Regexp.new value, false
if regexp.names.none?
record.errors.add attribute, :blank_regexp_group
else
extra_groups = regexp.names - valid_groups
if extra_groups.any?
record.errors.add attribute, :named_regexp, allowed: valid_groups.join(', '), extra: extra_groups.join(', ')
end
end
end
end
private
def valid_groups
options[:groups]
end
end
在模型中,我的验证如下:
validates :regexp_string, named_regexp: { groups: %w(name surname) }
在haml视图中,它是一个简单的输入
= f.input :regexp_string, as: :string
我正在使用:
gem 'nested_form'
gem 'simple_form'
gem 'client_side_validations', github: 'DavyJonesLocker/client_side_validations'
gem 'client_side_validations-simple_form', github: 'DavyJonesLocker/client_side_validations-simple_form'
当我按下提交按钮并且我有一个糟糕的正则表达式验证不会通过错误。 如果选择了其他表单选项,我也无法在js的regexp字段中添加状态验证。我添加了requred:true但仍然没有,我该怎么强迫呢?
||编辑:
我发现有一种方法可以通过以下方式添加这些客户端验证:
ClientSideValidations.validators.local["named_regexp"] = function(element, options) {
var s = element.val();
if (ADD_ALL_VALIDATIONS_HERE) {
return options.message;
}
}
但它太复杂了,我无法相信没有更简单的方法。或者有人知道吗?