Rails и сериализаторы активной модели: запретите двойное кодирование JSON и экранирующие символы (\)

В одном из моих контроллеров я вручную собираю свои данные JSON, чтобы иметь возможность использовать пользовательские сериализаторы AMS:

data[:foos] = {}
Foo.find(foo_ids).each do |f|
  data[:foos][f.id.to_s] = render_to_string :json => f, :root => false, :serializer => FooCustomSerializer
end

data[:moos] = {}
Moo.find(moo_ids).each do |f|
  data[:moos][f.id.to_s] = render_to_string :json => f, :root => false, :serializer => MooCustomSerializer
end

result = {:system => system_info, :content => data}

respond_to do |format|
  format.json { render json: result }
end

Это работает, но проблема в том, что он дважды кодирует Moos и Foos, а в рендеринге JSON есть много экранированных символов:

{ "system":"OK",
  "content":
    "foos":"[{\"name\":\"Rex\",\"breed\":\"Lab\"},{\"name\":\"Spot\",\"breed\":\"Dalmation\"},{\"name\":\"Fido\",\"breed\":\"Terrier\"}]"
    ...

Есть ли способ предотвратить это?

1 ответ

Просто положи .to_json после хеш-переменной.

Пример:

format.json { render json: result }
# Change to
format.json { render json: result.to_json }
Другие вопросы по тегам