根据外部API验证Rails模型

时间:2010-09-07 21:02:00

标签: ruby-on-rails ruby validation

考虑以下情况:

您有一个帐户模型 您有一个管理订阅的外部服务(例如CheddarGetter)。

您不希望在CG上创建客户,除非输入的数据通过您自己的验证,同样您不希望将客户保存到您自己的数据库,除非CG接受客户记录和付款详细信息。

但是,您希望任何一方的任何验证错误都可供用户使用。

那么,你会怎么做呢?验证任何一方都很简单,但让双方合作似乎很困难。

1 个答案:

答案 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返回无效记录,也会阻止保存到数据库。