代码之家  ›  专栏  ›  技术社区  ›  Neil Middleton

根据外部API验证Rails模型

  •  2
  • Neil Middleton  · 技术社区  · 15 年前

    考虑以下场景:

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

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

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Neil Middleton    15 年前

    我已经找到了实现这一目标的方法。

    本地验证正常进行。 外部验证在创建前回调中执行:

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

    只要回调对无效记录返回false,并向base添加错误,用户就会看到一个验证,并且如果API返回无效记录,还会阻止保存到数据库。