gpt4 book ai didi

ruby-on-rails - 如何在 Rails API 中返回自定义错误代码?

转载 作者:行者123 更新时间:2023-12-03 07:43:19 25 4
gpt4 key购买 nike

给定一个在 Rails 中实现的 RESTful API,我想在响应中不仅包含由 ActiveModel::Validations 生成的错误消息。 ,还有自定义错误代码。首先我想指出,我不是在谈论 HTTP Status codes .我正在谈论将任何类型的错误(从像 record not found 这样的一般错误到像 username can't be blank 这样的小验证错误)映射到唯一的数字代码,即自定义应用程序特定的错误代码。让我举个例子 - 给出错误代码列表,例如:

1: record not found
... some other errors
# Validation errors for User model between 1000 to 2000
1001: first name can't be blank
1002: first name must contain at least 3 characters
1003: last name can't be blank
1004: last name must contain at least 3 characters
...some other errors

如果我有一个用户表单并提交它的名字和姓氏为空字段,我希望在响应正文中有如下内容:
{error_codes: [1001, 1002, 1003, 1004]}

或类似的东西(例如,我可以有一个 error objects 的数组,每个都有一个代码、开发人员的消息、用户的消息等)。让我举一个 Twilio API 的例子,取自 RESTful API Design: what about errors? :

enter image description here

在这里,20003 是一些自定义的 Twilio 特定代码。问题是 - 这如何在 Rails 中实现?我看到几个困难的方面:
  • 如何获取可能遇到的所有可能错误的列表。即使仅针对验证错误也很难获得这样的列表,更不用说可能发生的其他类型的错误了。
  • 应该如何组织这个列表 - 也许在 YAML 文件中?
  • 如何访问列表 - 可能类似于通过 I18n.t 访问翻译的方式?

  • 我将非常感谢有关该主题的任何建议。谢谢你。

    附言我认为这是 similar question .

    最佳答案

    可以找到 ActiveModel 内置验证器 here .有时一个验证器可以检查不止一件事并输出不同的消息。如您所料,查看它们的最简单方法是在其 I18n yaml 文件中,可以找到 here .

    做你想做的事情的一种方法是用你的自定义代码覆盖这些消息。另一种方法是在将验证器显式附加到模型时传递自定义消息。

    validates :name, message: 'code:001 - my custom message'

    不过,这两个选项对您的结构没有帮助。您不会有不同的 key code在你的 json 开箱即用。

    您可以实现的一种方法是创建一个帮助程序来解析错误消息并在将代码分配给模型实例后提取代码。类似于以下内容:
    def extract_error_codes(error_messages)
    error_messages.map{ |message| message.match('^code:(\d+)\s-')[1] }
    end

    如果您使用格式 code:001 - my custom message,这将为您提供该实例的错误代码数组。 .

    另一种更复杂的方法是利用 ActiveModel 的 Validator 类并在验证失败时存储错误代码。这将需要进入每个验证器来分配代码。

    关于ruby-on-rails - 如何在 Rails API 中返回自定义错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873238/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com