2009-02-25 75 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