为路由约束失败提供自定义错误(Rails)

时间:2016-06-15 12:16:33

标签: ruby-on-rails json-api

获得一个Rails 4应用程序,该应用程序包含基本ApiConstraint类中的路由,用于检查用户是否具有Accept标头的正确值:

# app/routes.rb
scope(module: "v1", defaults: { format: :json }, constraints: ApiConstraint.new(version: 1)) do
  # routes
end  

# lib/api_constraint.rb
class ApiConstraint
  attr_reader :version

  def initialize(options)
    @version = options[:version] || 1
  end

  def matches?(request)
    regex = /.../
    !!request.headers['Accept'].match(regex)
  end
end

这一切都很好,但我希望在错误处理方面更加强大(来自true的简单false / matches? isn&# 39;足够)。有可能以某种方式只检查一次并提供正确的415 Unsupported Media Type错误吗?我说一次,因为我认为我在routes.rb的底部再次进行检查时看到了解决方法,例如:

match '*any', via: :all, to: -> (env) do
  if env["HTTP_ACCEPT"].match(/.../)
    [415, {}, "{ \"error\": \"Bad Accept header or something ... \" }"]
  else
    [404, {}, [ApiErrors.not_found.to_json]]
  end
end

但这看起来真的很草率。我想避免使用像法拉第等东西这样的外部东西。我觉得这个在Rails中是可能的,我只是不确定语法。我所看到的所有其他SO问题/博客文章似乎都没有提到这种功能。任何回复表示赞赏感谢。

0 个答案:

没有答案