Ruby 1.8.7 と Rails 3.2.12 を使用。
「.json」拡張子を持つ URL をテストするときに問題が発生しています。私はカスタムエラーページを構築しており、次のものがあります:
# errors_controller.rb
def show
@exception = env["action_dispatch.exception"]
respond_to do |format|
format.json { render :json => { :error => @exception.message, :status => request.path[1..-1] } }
format.html { render :file => File.join(Rails.root, 'public', request.path[1..-1]), :format => [:html], :status => request.path[1..-1], :layout => false }
end
end
# routes.rb
match ":status" => "errors#show", :constraints => { :status => /\d{3}/ }
# application.rb
config.exceptions_app = self.routes
「localhost:3000/session/nourl.json」などの URL の場合、の HTML ブロックをトリガーrespond_to
し、サーバーがこれらのログで HTML 形式で応答することを確認できます。
Processing by ErrorsController#show as HTML
Parameters: {"status"=>"404"}
Rendered public/404.html (13.2ms)
Completed 404 Not Found in 48ms (Views: 47.3ms | ActiveRecord: 0.0ms)
JSONブロックをトリガーできる唯一の方法:format => :json
はルート内であり、それは正常に機能しますが、「localhost:3000/session/nourl」もJSONで応答します。
両方のケースが期待どおりにトリガーされた他の例を見たことがあり、同様の動作の他のケースはまったく見られないため、ここで何か愚かなことをしているように感じます。したがって、これは孤立した状況であるか、私が観察できない、または他の場所で引き起こしているカスケード問題。
潜在的な問題について誰かが洞察を提供できれば、私は感謝します。
更新しました:
もう少し情報: 「localhost:3000/locations/1.json」のようなクエリを実行すると、期待どおりの応答が得られます。オブジェクトの詳細を含む JSON 形式のページ。「.json」拡張子を持つ任意の URL を要求し、返されるカスタム JSON 応答をフォーマットしようとすると、これと同じ動作を実現できません。これを行う方法はありますか?