如何在rails中返回错误消息

时间:2016-10-18 15:14:15

标签: ruby-on-rails error-handling fastlane

我学习铁轨并对一些基础知识感到困惑。这是我的API方法:

 <referenceContainer name="header.panel">
    <block class="Magento\Framework\View\Element\Html\Links" name="responsive.new.menu" template="Yourtheme_Menu::responsiveMenu.phtml />  
 </referenceContainer>

我的 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不属于我的模型。我只需要从我的客户端应用程序调用它,然后发回结果。

作为一个附带问题,在这种情况下我应该返回错误状态?

2 个答案:

答案 0 :(得分:2)

您应该在创建对象时返回发生的错误(如果有)。您的对象是Spaceship::Tunes::Application的实例,因此您应该搜索此类是否定义了返回验证错误的任何实例方法。

我对这个课程并不熟悉,但在快速查看它的文档后,我发现它甚至没有create method中的任何验证。

因此,如果对象创建失败,您只能返回自定义错误消息。

至于

  

在这种情况下我应该返回错误状态?

查看list of status codes并选择合适的一个(我认为400(错误请求)会这样做。)

答案 1 :(得分:0)

你可以做这样的事情

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了解原因