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)

よくわかりません。で試してみましたif 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 に答える