1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-16 21:48:02 +00:00

Add Response With JSON Regardless Of Content Type as a Rails TIL

This commit is contained in:
jbranchaud
2022-09-01 14:38:57 -05:00
parent 5429a6fea1
commit 806aee345e
2 changed files with 35 additions and 1 deletions

View File

@@ -0,0 +1,33 @@
# Respond With JSON Regardless Of Content Type
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](https://api.rubyonrails.org/classes/ActionController/MimeResponds.html)
can be used when defining the `respond_to` block. This tells the controller
that _any_ mimetype is accepted.
```ruby
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