2009-02-25 45 views
0

我正在提供一个由外部公司调用的Web服务。所需的数据包括几个模型,包括人员,地址等。我想根据请求中的某些字段有条件地验证接收到的数据。我最终会有许多不同的验证数据集,尽管目前我只有一个,而我即将添加第二个验证数据。如何在n条件下使用ActiveRecord进行条件验证?

我目前的模型看起来像这样

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 

这显然做工精细的2家企业/国家,但不会为公司及/或国家的数量增加很好地工作。我正在考虑将验证数据保存在数据库或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?
  • 您是否加载和解析每个请求的配置数据,或者一次加载服务器?
  • 您是如何构建验证的实际方法的?

回答

1

我做了类似的电话号码。你的方法与我自己做的非常相似。回答您的问题:

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

这对你有帮助吗?

+0

是的。谢谢 – 2009-02-25 10:39:11