2010-09-07 103 views
2

考慮以下情形Rails的模型:驗證對外部API

您有一個帳戶模型 您有哪些管理訂閱外部服務(如CheddarGetter)。

除非CG接受客戶記錄和付款詳細信息,否則您不想在CG上創建客戶,除非輸入的數據通過了您自己的驗證,並且您也不想將客戶保存到自己的數據庫。

但是,您希望任何一方的驗證錯誤都可以提供給用戶。

那麼,你會怎麼做呢?驗證任何一方都很簡單,但讓雙方一起工作似乎很困難。

回答

1

我找到了一種方法來實現這一點。

本地驗證正常進行。 外部驗證在一個before_create回調進行:

def save_customer_on_cheddargetter 
    begin 
     external_api_stuff 
    rescue => error 
     errors.add :base, error.message 
     return false 
    end 
    true 
    end 

只要回調函數返回一個無效的記錄錯誤,並增加了錯誤的基礎上,用戶會看到一個驗證,並且還阻止保存到數據庫應該該API返回無效記錄。

+0

只是一個說明:確保你返回false。我只是做一個正常的回報,期待有效?返回false是因爲錯誤不是空白的,但它不會以這種方式工作。感謝你的回答尼爾,在我將頭撞在牆上一天後,我終於遇到了它。 – joeellis 2011-07-01 19:30:05