如何 return rails 中的错误消息
How to return error messages in rails
我正在学习 rails 并且对一些基础知识感到困惑。这是我的 API 方法:
def itunes_app_create
begin
app = Spaceship::Tunes::Application.create!(name: params[:itunes_app_name],
primary_language: "English",
version: params[:itunes_app_version],
sku: params[:itunes_app_sku],
bundle_id: params[:itunes_app_bundle_id],
team_id: params[:itunes_team_id])
render json: app.to_json, status: 200
rescue
render json: app.errors.full_messages.to_json, status: 200
end
end
我的 app.errors.full_messages.to_json
行失败了,因为好吧,我只是根据我看到的东西编造的。我如何 return 一条关于导致方法失败的原因的消息?
不确定是否重要,app
不是我模型的一部分。我只需要从我的客户端应用程序调用它,然后发回结果。
作为一个附带问题,在这种情况下,我应该 return 出现什么错误?
您应该 return 创建对象时发生的错误(如果有)。您的对象是 Spaceship::Tunes::Application 的实例,因此您应该搜索此 class 是否定义了任何 return 验证错误的实例方法。
我不熟悉这个 class,但在快速查看它的文档后,我什至没有看到它在 create method.
中有任何验证
因此,如果万一对象创建失败,您可以 return 自定义错误消息。
至于
what status should I return with the error in this case?
查看 list of status codes 并选择合适的(我认为 400(错误请求)即可)。
你可以这样做
def itunes_app_create
begin
app = Spaceship::Tunes::Application.create!(name: params[:itunes_app_name],
primary_language: "English",
version: params[:itunes_app_version],
sku: params[:itunes_app_sku],
bundle_id: params[:itunes_app_bundle_id],
team_id: params[:itunes_team_id])
render json: app.to_json, status: 200
rescue => e
render json: {error: e, status: 500}.to_json
end
end
但是,如果您要构建一个完整的 api,您可能想提出自己的错误代码,并就何时使用 Andrey 如此礼貌地包含的 http 错误代码制定一个约定。盲目地捕获所有错误类型也不是一个好的做法,因为它是行为隐藏,并且会在不同场景中概括您的应用程序的行为。在我的示例中,因为您是 return 错误消息,所以它给了您一点可见性。
任何时候你被催促写这样的东西
rescue => e
改写这样的东西
rescue SyntaxError => e
在处理错误时要慎重,请参阅此 question 了解原因
我正在学习 rails 并且对一些基础知识感到困惑。这是我的 API 方法:
def itunes_app_create
begin
app = Spaceship::Tunes::Application.create!(name: params[:itunes_app_name],
primary_language: "English",
version: params[:itunes_app_version],
sku: params[:itunes_app_sku],
bundle_id: params[:itunes_app_bundle_id],
team_id: params[:itunes_team_id])
render json: app.to_json, status: 200
rescue
render json: app.errors.full_messages.to_json, status: 200
end
end
我的 app.errors.full_messages.to_json
行失败了,因为好吧,我只是根据我看到的东西编造的。我如何 return 一条关于导致方法失败的原因的消息?
不确定是否重要,app
不是我模型的一部分。我只需要从我的客户端应用程序调用它,然后发回结果。
作为一个附带问题,在这种情况下,我应该 return 出现什么错误?
您应该 return 创建对象时发生的错误(如果有)。您的对象是 Spaceship::Tunes::Application 的实例,因此您应该搜索此 class 是否定义了任何 return 验证错误的实例方法。
我不熟悉这个 class,但在快速查看它的文档后,我什至没有看到它在 create method.
中有任何验证因此,如果万一对象创建失败,您可以 return 自定义错误消息。
至于
what status should I return with the error in this case?
查看 list of status codes 并选择合适的(我认为 400(错误请求)即可)。
你可以这样做
def itunes_app_create
begin
app = Spaceship::Tunes::Application.create!(name: params[:itunes_app_name],
primary_language: "English",
version: params[:itunes_app_version],
sku: params[:itunes_app_sku],
bundle_id: params[:itunes_app_bundle_id],
team_id: params[:itunes_team_id])
render json: app.to_json, status: 200
rescue => e
render json: {error: e, status: 500}.to_json
end
end
但是,如果您要构建一个完整的 api,您可能想提出自己的错误代码,并就何时使用 Andrey 如此礼貌地包含的 http 错误代码制定一个约定。盲目地捕获所有错误类型也不是一个好的做法,因为它是行为隐藏,并且会在不同场景中概括您的应用程序的行为。在我的示例中,因为您是 return 错误消息,所以它给了您一点可见性。
任何时候你被催促写这样的东西
rescue => e
改写这样的东西
rescue SyntaxError => e
在处理错误时要慎重,请参阅此 question 了解原因