我正处于开发(JSON)API 阶段并决定继承我ApiController
的 fromActionController::Metal
以利用速度等。
所以我已经包含了一堆模块来使它工作。
最近我决定在找不到记录时以空结果响应。Rails 已经ActiveRecord::RecordNotFound
从Model#find
方法中抛出,我一直在尝试使用rescue_from
它来捕获它并编写如下内容:
module Api::V1
class ApiController < ActionController::Metal
# bunch of included modules
include ActiveSupport::Rescuable
respond_to :json
rescue_from ActiveRecord::RecordNotFound do
binding.pry
respond_to do |format|
format.any { head :not_found }
end
end
end
end
在调用我的简单动作之后
def show
@post = Post.find(params[:id])
end
并且执行永远达不到rescue_from
。它的抛出:
ActiveRecord::RecordNotFound (Couldn't find Post with id=1
进入我的日志文件。
我一直在尝试它并处于生产模式。服务器以 404 响应,但响应正文是JSON请求的标准HTML错误页面。
当我将继承从 更改为 时效果ActionController::Metal
很好ActionController::Base
。
您可能会注意到缺少respond_with
呼叫。那是因为我使用RABL作为我的模板系统。
所以问题是:是否有机会rescue_from
使用Metal
或摆脱响应中的 HTML?