我提供一个外部公司调用的Web服务。所需数据包括几个模型,包括人员、地址等。我希望根据请求中的某些字段有条件地验证接收到的数据。我最终将拥有许多不同的验证数据集,尽管目前我只有一个,即将添加第二个。
我现在的模型看起来像这样
class Person < ActiveRecord::Base
validates_length_of :first_name, :within => 1..32, :allow_blank => true
...
...
end
从概念上讲,我的模型现在需要这样做。
class Person < ActiveRecord::Base
validate :first_name?
def first_name?
if country == 'UK'
if company_name == 'ABC'
validates_length_of :first_name, :within => 1..32
else if company_name == 'DEF'
validates_length_of :first_name, :within => 2..20
end
else if country == 'DE'
if company_name == 'ABC'
validates_length_of :first_name, :within => 1..32
else if company_name == 'DEF'
validates_length_of :first_name, :within => 2..20
end
end
end
这显然对两个公司/国家都有效,但随着公司和/或国家数量的增加,效果不佳。我现在正在考虑将验证数据保存在数据库或yaml文件中,然后根据模型外部存储的最小、最大、格式值手动对每个字段执行验证。
我认为我可以将验证数据存储在一个类似于以下内容的结构中
country: UK
companyname: ABC
field: first_name
minimum_length: 2
maximum_length: 20
required: true
field: middle_name
minimum_length: 1
maximum_length: 10
field: email_address
minimum_length: 10
format: /someregexforemail addresses/
companyname: DEF
field
...
country: DE
companyname: XYZ
field:
....
等等。
然后我可以加载这个验证数据,并在自己的手动滚动验证程序中使用它。
过去有人做过类似的事情吗?你用了什么方法?我特别感兴趣的是你是如何处理以下问题的。
-
您将配置数据(如DB或YAML)存储在哪里?
-
您是为每个请求加载和分析配置数据,还是在服务器加载时加载一次?
-
您是如何构造进行验证的实际方法的?