【问题标题】:Rescue From If JSON从如果 JSON 中拯救
【发布时间】:2014-10-23 17:48:56
【问题描述】:

当且仅当请求是 JSON 时,我想从 RecordNotFound 异常中解救出来。现在,如果我为skip_before_action 执行此操作,我会执行以下操作:

skip_before_action :verify_authenticity_token, if: :json_request?

rescue_from 中是否有此语法?比如:

rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found, if: :json_request?

辅助方法:

protected
  def json_request?
    request.format.json?
  end

【问题讨论】:

  • 如果不是json请求,你可以用任何一种方式拯救它并重新抛出它?

标签: ruby-on-rails ruby json rescue


【解决方案1】:

我假设如果请求不是JSON 那么你想提出?如果是这样,您应该能够做到这一点

rescue_from ActiveRecord::RecordNotFound { request.format.json? ? record_not_found : super }

rescue_from ActiveRecord::RecordNotFound, with: lambda{|e| request.format.json? ? record_not_found(e) : raise(e) }

这些将产生相同的影响,因为如果给定一个块,它会将其分配给options[:with],就像提供了with:一样,它会将其用作块并忽略传递给它的任何其他块

rescue_from 接受一个名为*klasses 的splat 参数和一个block。然后它解析*klasses 以确定传入的选项,它只关心:with。然后,它将:with 块应用于表示要处理的异常类名称的键。

没有其他选项会被确认。

请注意我没有测试过这个

【讨论】:

  • 我尝试了错误的底部语法:语法错误,意外'}',期待 =>
  • @steventnorris 抱歉编辑了我的答案,忘记给 writer lambda,因为它需要是一个可调用对象。
  • 仍然产生错误。在 html 调用中:在方法之外调用 super。在 json 调用中:参数数量错误(0 表示 1)[参考 record_not_found 方法]
  • @steventnorris record_not_found 需要参数吗?
  • json 请求格式正确。但是,html 请求会呈现一个空白的 html 页面
【解决方案2】:

你可以这样做:

rescue_from ActiveRecord::RecordNotFound do
  record_not_found if json_request?
end

我认为这种情况没有另一种语法:-(

【讨论】:

  • 这不起作用。它会在未找到的记录上呈现一个空白的 html 页面。
猜你喜欢
  • 2015-05-02
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
相关资源
最近更新 更多