Сериализация Ruby on Rails JSON - PullRequest
       5

Сериализация Ruby on Rails JSON

3 голосов
/ 27 февраля 2011

Я новичок в Ruby on Rails, поэтому, пожалуйста, прости меня, если это очевидный вопрос.

Я возвращаю объект JSON из метода контроллера (скажем, имя класса - "foo", и у него есть свойство "bar").

Я ожидал, что это будет сериализовано как:

{"bar" : "barValue" }

Однако, похоже, он сериализуется как

{"foo" : {"bar" : "barValue"}}

Это кажется несовместимым с a.) Что делают другие языки, b.) (Что более важно), что делает javascript.

Скажем, я определил тот же класс foo в Javascript:

var fooInstance = new Foo();
fooInstance.bar = "barValue";

И затем я делаю это, используя одну из библиотек Javascript JSON (например, https://github.com/douglascrockford/JSON-js). Тогда на выходе получается что-то вроде:

{"bar" : "barValue" }

Но входы (а также выходы) в методы моего контроллера ожидают:

{"foo" : {"bar" : "barValue"}

Так что я должен написать код по этим строкам, чтобы он работал:

var fooInstance = new Foo();
fooInstance.bar = "barValue";
var dummyObjectToKeepRailsHappy = { foo : fooInstance};

Итак, я неправильно выполняю сериализацию Rails? Или есть причина, по которой он так работает?

1 Ответ

9 голосов
/ 27 февраля 2011

Прочтите документацию по Rails to_json здесь .

Опция ActiveRecord :: Base.include_root_in_json контролирует поведение верхнего уровня to_json.В новом приложении Rails для него установлено значение true в initializers / new_rails_defaults.rb.Когда это правда, to_json будет испускать единственный корневой узел, названный в честь типа объекта.

Поэтому добавление в вашу среду / application.rb

config.active_record.include_root_in_json = true

должно решить ваши проблемы.

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