Подтвердить что ты не робот

Rails 4 - Как отображать JSON независимо от запрошенного формата?

Я бы хотел, чтобы Rails-контроллер (все они, фактически, это API) всегда отображал JSON.

Я не хочу, чтобы Rails возвращал "маршрут не найден" или пытался найти шаблон HTML или возвращать 406. Я просто хочу, чтобы он автоматически и всегда отображал JSON, например. из представления RABL или JBuilder.

Возможно ли это? Связанные вопросы, похоже, имеют ответы, которые имеют вышеупомянутые недостатки.

4b9b3361

Ответ 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.