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