1

我正在使用带有 ActiveResource 的 Rails 3.2.3。我在生产中有一个问题说:

ActiveResource::ResourceNotFound: Failed. Response code = 404. Response message = Not Found.

所以我试着像对待它一样对待它ActiveRecord::RecordNotFound

class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from ActiveRecord::RecordNotFound do |e|
    render_404
  end

  rescue_from ActiveResource::ResourceNotFound do |e|
    render_404
  end

  def render_404
    respond_to do |type|
      type.html { render template: 'shared/404_not_found', layout: 'application', status: '404 Not Found' }
      type.all  { render nothing: true, status: '404 Not Found' }
    end
  end
end

但是现在,当我部署时,我收到一条错误消息,告诉我:

/apps/com.example/shared/bundle/ruby/1.9.1/gems/activeadmin-0.4.3/lib/active_admin/namespace.rb:191:in `eval': uninitialized constant ActiveResource::ResourceNotFound (NameError)

我真的不明白。我尝试了 aif defined?(ActiveResource::ResourceNotFound)但后来又回到了以前的行为。

知道如何处理这个问题吗?

谢谢 !

编辑:目前我使用了以下代码,但我对此并不满意。

rescue_from Exception do |e|
  e.is_a?(ActiveResource::ResourceNotFound) ? render_404 : raise
end
4

1 回答 1

2

嘿,忽略我的评论我想出了一个解决方案:

rescue_from "ActiveResource::ResourceNotFound" do |e|
  render_404
end

将异常放在引号中,这样它就不会在启动时尝试评估它(我假设 ActiveResource 尚未加载)

于 2012-08-15T17:48:42.203 回答