我正在学习铁轨并且对一些基础知识感到困惑。这是我的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
线失败了,因为我刚刚从我看到的东西中做出来。如何返回导致方法失败的消息?
不确定是否重要,app
不属于我的模型。我只需要从我的客户端应用程序调用它,然后发回结果。
作为一个附带问题,在这种情况下,我应该返回错误状态?
您应该在创建对象时返回发生的错误(如果有)。您的对象是Spaceship::Tunes::Application的一个实例,因此您应该搜索此类是否定义了返回验证错误的任何实例方法。
我不熟悉这个类,但在快速查看它的文档之后,我看不到它甚至在create method中有任何验证。
因此,如果对象创建失败,您只能返回自定义错误消息。
至于
在这种情况下,我应该返回错误状态?
看看list of status codes并选择合适的一个(我认为400(Bad Request)会做)。
你可以这样做
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,你可能想要提出自己的错误代码和一个约定,当你使用哪个http错误代码时,如此礼貌地包括了安德烈。另外,盲目地捕获所有错误类型并不是一个好习惯,因为它是行为隐藏,它会在不同的场景中推广应用程序的行为。在我的示例中,因为您返回错误消息,它会给您一点可见性。
任何时候你被敦促写这样的东西
rescue => e
写这样的东西
rescue SyntaxError => e
非常谨慎地处理错误,请参阅此question了解原因