2
考慮以下情形Rails的模型:驗證對外部API
您有一個帳戶模型 您有哪些管理訂閱外部服務(如CheddarGetter)。
除非CG接受客戶記錄和付款詳細信息,否則您不想在CG上創建客戶,除非輸入的數據通過了您自己的驗證,並且您也不想將客戶保存到自己的數據庫。
但是,您希望任何一方的驗證錯誤都可以提供給用戶。
那麼,你會怎麼做呢?驗證任何一方都很簡單,但讓雙方一起工作似乎很困難。
考慮以下情形Rails的模型:驗證對外部API
您有一個帳戶模型 您有哪些管理訂閱外部服務(如CheddarGetter)。
除非CG接受客戶記錄和付款詳細信息,否則您不想在CG上創建客戶,除非輸入的數據通過了您自己的驗證,並且您也不想將客戶保存到自己的數據庫。
但是,您希望任何一方的驗證錯誤都可以提供給用戶。
那麼,你會怎麼做呢?驗證任何一方都很簡單,但讓雙方一起工作似乎很困難。
我找到了一種方法來實現這一點。
本地驗證正常進行。 外部驗證在一個before_create回調進行:
def save_customer_on_cheddargetter
begin
external_api_stuff
rescue => error
errors.add :base, error.message
return false
end
true
end
只要回調函數返回一個無效的記錄錯誤,並增加了錯誤的基礎上,用戶會看到一個驗證,並且還阻止保存到數據庫應該該API返回無效記錄。
只是一個說明:確保你返回false。我只是做一個正常的回報,期待有效?返回false是因爲錯誤不是空白的,但它不會以這種方式工作。感謝你的回答尼爾,在我將頭撞在牆上一天後,我終於遇到了它。 – joeellis 2011-07-01 19:30:05