Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 4 - How to render JSON regardless of requested format?

I'd like a Rails controller (all of them, actually, it's an API) to render JSON always always.

I don't want Rails to return "route not found", or try and fail to find an HTML template, or return 406. I just want it to automatically and always render JSON, e.g. from a RABL or JBuilder view.

Is this possible? Related questions seem to have answers that have the aforementioned downsides.

like image 660
Zach Avatar asked May 30 '14 03:05

Zach


3 Answers

You can add a before_filter in your controller to set the request format to json:

# app/controllers/foos_controller.rb

before_action :set_default_response_format

protected

def set_default_response_format
  request.format = :json
end

This will set all response format to json. If you want to allow other formats, you could check for the presence of format parameter when setting request.format, for e.g:

def set_default_response_format
  request.format = :json unless params[:format]
end
like image 163
vee Avatar answered Oct 09 '22 21:10

vee


You can use format.any:

def action
  respond_to do |format|
    format.any { render json: your_json, content_type: 'application/json' }
  end
end
like image 30
Peleg Avatar answered Oct 09 '22 20:10

Peleg


It's just:

render formats: :json
like image 5
Artem P Avatar answered Oct 09 '22 22:10

Artem P