考虑以下情况:
您有一个帐户模型 您有一个管理订阅的外部服务(例如CheddarGetter)。
您不希望在CG上创建客户,除非输入的数据通过您自己的验证,同样您不希望将客户保存到您自己的数据库,除非CG接受客户记录和付款详细信息。
但是,您希望任何一方的任何验证错误都可供用户使用。
那么,你会怎么做呢?验证任何一方都很简单,但让双方合作似乎很困难。
答案 0 :(得分:1)
我找到了实现这一目标的方法。
本地验证正常进行。 外部验证在before_create回调中执行:
def save_customer_on_cheddargetter
begin
external_api_stuff
rescue => error
errors.add :base, error.message
return false
end
true
end
只要回调对于无效记录返回false并向基础添加错误,用户就会看到一次验证,并且如果API返回无效记录,也会阻止保存到数据库。