Как я могу отображать json: во всех действиях контроллера Rails 4.2.1

Согласно примечанию response_with/respond_to в примечаниях к выпуску 4.2... Руководства по Ruby и:

Я хотел бы воспользоваться этой возможностью, чтобы разделить response_with/class-level response_to на внешний плагин. Обычно я не фанат кода, который получается при использовании этого шаблона. Он поощряет использование model#to_json и скрывает разницу между ответами HTML и API, запутывая код.

Итак, как насчет того, чтобы разделить это на гем для 4.2 с текущим поведением, но также с возможностью получить новое поведение, как предлагается здесь, через точку конфигурации. - ДХХ

Я установил ActiveModelSerializer 0.9.3 и обнаружил, что он все еще работает с:

render json: @object

в контроллере...

Как я могу render json: по умолчанию в контроллере приложений?


person Alex Chin    schedule 17.04.2015    source источник


Ответы (2)


Вам не нужно отображать какое-либо представление непосредственно из контроллера приложения, а из контроллера, расширяющего ApplicationController. Если вы говорите, что response_with все еще работает в вашей версии rails, вам просто нужно поставить response_to :json, например:

class MyController < ApplicationController
respond_to :json

def my_action
....
respond_with(@variable)
end
end

response_with автоматически отобразит представление в правильном формате на основе MIME-типа вашего запроса оттуда.

Если это не работает, добавьте 'ответчики' гема, '~> 2.0' в ваш файл гема.

person Typpex    schedule 17.04.2015
comment
Если я сделаю это как для действий index, так и для действий show, то сериализатор activemodels повлияет на действие index, но не на show. - person Alex Chin; 17.04.2015
comment
Да, я тоже должен удалить файлы .jbuilder. - person Alex Chin; 17.04.2015
comment
Вы хотите добавить к ответу удаление файлов jbuilder, и тогда я смогу пометить как ответивший? - person Alex Chin; 17.04.2015
comment
Эти файлы используются для генерации json? Конечно, вы можете добавить их :) - person Typpex; 18.04.2015
comment
Я пытаюсь работать с ActiveModelSerializer, хотя... На самом деле это не работает - работает только с jBuilder - person Alex Chin; 19.04.2015

Вы можете изменить файлы routes.rb, чтобы указать формат по умолчанию.

routes.rb

resources :clients, defaults: {format: :json}

Это изменит формат ответа по умолчанию для всего вашего clients_controller

person Prakash    schedule 24.04.2015