如何在n条件下在ActiveRecord中进行条件validation?
我正在提供一个由外部公司调用的Web服务。 所需的数据涵盖了几个模型,包括人员,地址等。我想根据请求中的某些字段有条件地validation接收的数据。 我最终会有许多不同的validation数据集,虽然目前我只有一个,我即将添加第二个。
我目前的模型看起来像这样
class Person 1..32, :allow_blank => true ... ... end
从概念上讲,我的模型现在需要做这样的事情。
class Person 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
这显然适用于2个公司/国家,但随着公司和/或国家数量的增加,效果不佳。 我现在正在考虑将validation数据保存在数据库或YAML文件中,然后根据模型外部存储的最小,最大格式值为每个字段手动执行validation。
我想我可以将validation数据存储在类似于以下的结构中
国家:英国 公司名称:ABC field:first_name minimum_length:2 maximum_length:20 要求:是的 field:middle_name minimum_length:1 maximum_length:10 字段:email_address minimum_length:10 格式:/ someregexforemail地址/ 公司名称:DEF 领域 ... 国家:DE 公司名称:XYZ 领域: ....
等等。
然后,我可以加载此validation数据,并在我自己的手动validation器中使用它。
过去有没有人做过类似的事情,你用过什么方法? 我特别想知道您是如何处理以下内容的。
- 您在哪里存储配置数据,即DB或YAML?
- 您是否为每个请求加载和解析配置数据,或者在加载服务器时加载一次?
- 你是如何构建进行validation的实际方法的?
我用电话号码做了类似的事。 你的方法与我自己做的很相似。 回答你的问题:
- 我将validation配置存储在YAML文件中。 Hovewer,如果您的数据将在很大程度上增长,您应该考虑使用数据库。
- 我加载并解析每个请求的数据。 我不认为这是最好的方法,并计划重写这一部分。
- 我写了自己的validation。 你可以在这里找到如何做到的线索。
这对你有帮助吗?