如何在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的实际方法的?

我用电话号码做了类似的事。 你的方法与我自己做的很相似。 回答你的问题:

  1. 我将validation配置存储在YAML文件中。 Hovewer,如果您的数据将在很大程度上增长,您应该考虑使用数据库。
  2. 我加载并解析每个请求的数据。 我不认为这是最好的方法,并计划重写这一部分。
  3. 我写了自己的validation。 你可以在这里找到如何做到的线索。

这对你有帮助吗?