← Back to all TILs

Respond With JSON Regardless Of Content Type

rails Written September 01, 2022

Let's say you want to serve some JSON from an endpoint (for example, you might be serving the apple-app-site-association file for iOS Universal Links). Regardless of whether the endpoint is requested as JSON (application/json), HTML (text/html), or something else (plain/text), you want to respond with JSON.

The format#any method can be used when defining the respond_to block. This tells the controller that any mimetype is accepted.

def show
  respond_to do |format|
    format.any do
      render params[:page],
        formats: 'json',
        content_type: "application/json",
        layout: false
    end
  end
end

The other important element in this is formats: 'json' which helps Rails find your <template_name>.json.erb file in the views directory.

Though I cannot find any documentation for it, format.all appears to work the same as format.any as described in the above example.

h/t Dillon Hafer

Other posts like this