Есть ли способ обернуть ответ всех методов контроллера в объекте json в application_controller.rb? - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно написать некоторый код в одном месте (base_controller.rb, который наследуется от application_controller.rb), который оборачивает все исходящие ответы json от контроллеров в json объект перед возвратом.

В моем Rails (5.xx), существует ~ 100 конечных точек, обслуживающих различные типы данных (объекты json, массивы, массивы массивов и т. Д.).Из-за недавнего требования я должен обернуть их все в родительский объект.

Предыдущее состояние:

some_controller.rb

return_obj = { key: value }
render json: return_obj

Ожидаемое состояние:

some_controller.rb вернет { key: value }, но это будет перехвачено base_controller.rb, что, в свою очередь, вернет что-то вроде { payload: { key: value }, other_info: info }

1 Ответ

2 голосов
/ 26 июня 2019

Опция-1: У нас есть что-то похожее в нашей настройке, мы делаем то, что у нас есть метод с именем render_response в нашем base_api_controller файле. Который выглядит примерно так:

  def render_response(render_params)
    # controller_name, action_name will give you controller and action which rendered the response.
    # so you can decide weather to process anything or just render

    render_params[:json] = { payload: render_params[:json] }
    render render_params
  end

И действие вашего контроллера преобразуется во что-то вроде:

return_obj = { key: value }
render_response json: return_obj

Лично (и очевидно) мне нравится первый подход, потому что он явный, и просмотр кода контроллера дает нам информацию о том, что мы обрабатываем ответ дальше.

Опция-2: Если вам не нравится замена render на render_response, вы можете следовать этому руководству для настройки промежуточного программного обеспечения стойки, что тоже очень просто. но вам придется размещать проверки контроллеров, если вы не хотите делать какие-либо обновления для некоторых конкретных действий контроллера. Также обратите внимание, что это будет автоматически, поэтому, если никто не заметит (давайте посмотрим на кого-то совершенно нового для вашего кода), он изменит ответ. Что мне лично не очень нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...