I'm trying to build an API in rails 4, and am having an issue where rails returns a 500 error instead of a 406 when using respond_to :json
and trying to access the html version.
Here's an example controller demonstrating the problem:
class PostsController < ApplicationController respond_to :json def index @posts = Post.all end end
I also have a jbuilder view for index
that works when accessing via JSON. If I try accessing the route without the JSON extension, It attempts to load the HTML template (which doesn't exist) and returns a 500 error, instead of just rendering JSON or returning a 406 error.
What could be causing this? Cheers for any help.
I believe there are 2 parts here:
1) json only requests in rails
2) json only responses in rails
1) Configure your application controller to ensure json requests only
# app/controller/application_controller.rb before_action :ensure_json_request def ensure_json_request return if request.format == :json render :nothing => true, :status => 406 end
2) Configure your Rails API routes to ensure json responses only
# config/routes.rb MyApp::Application.routes.draw do namespace :api, constraints: { format: 'json' } do namespace :v1 do resources :posts end end end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With