Rails 4 - Как отображать JSON независимо от запрошенного формата?
Я бы хотел, чтобы Rails-контроллер (все они, фактически, это API) всегда отображал JSON.
Я не хочу, чтобы Rails возвращал "маршрут не найден" или пытался найти шаблон HTML или возвращать 406. Я просто хочу, чтобы он автоматически и всегда отображал JSON, например. из представления RABL или JBuilder.
Возможно ли это? Связанные вопросы, похоже, имеют ответы, которые имеют вышеупомянутые недостатки.
Ответы
Ответ 1
Вы можете добавить before_filter
в свой контроллер, чтобы установить формат запроса json
:
# app/controllers/foos_controller.rb
before_action :set_default_response_format
protected
def set_default_response_format
request.format = :json
end
Это установит весь формат ответа на json
. Если вы хотите разрешить другие форматы, вы можете проверить наличие параметра format
при настройке request.format
, например, например:
def set_default_response_format
request.format = :json unless params[:format]
end
Ответ 2
Вы можете использовать format.any
:
def action
respond_to do |format|
format.any { render json: your_json, content_type: 'application/json' }
end
end
Ответ 3
У меня была аналогичная проблема, но с расширением .js. Чтобы решить, я сделал следующее в представлении:
<%= params.except!(:format) %>
<%= will_paginate @posts %>
Ответ 4
Это просто:
render formats: :json
Ответ 5
Конечно:
before_filter :always_json
protected
def always_json
params[:format] = "json"
end
Вероятно, вы должны поместить это в корневой контроллер для своего API.