Формат JSON для GridPanel из ExtJS

JSON огенные-заклинания

Решил тут покапаться в ExtJS т.к. давно уже хотел это сделать, и вот теперь посвились время, желание и возможность. И с наскоку наступил на грабли, которые отняли у меня порядочно времени, но решение оказалось безумно простым.

Оказывается в Rails 2.1 немного изменился формат JSON. По умолчанию, для каждой записи добавляется идентификатор указывающий на класс объекта который был сериализован в эту запись. Пример:

...
[{"site": {"name": "Hi-Tech Melancholia",  "id": 1}},
 {"site": {"name": "RSDN", "id": 2}}]
...

Видите ключ “site”? Если он присутствует, то класс Ext.data.JsonStore не может правильно распознать JSON и, например, как следствие этого, GridPanel, который его использует не выводит данные.

Но, потратив немало врмени, я нашел решение. В файле config/initializers/new_rails_defaults.rb есть параметр ActiveRecord::Base.include_root_in_json который будучи установленный в false, убирает идентификатор класса из JSON получая такой вот результат:

...
[{"name": "Hi-Tech Melancholia",  "id": 1},
 {"name": "RSDN", "id": 2}]
...

Я не стал приводить весь код JSON-ответов т.к. они довольно длинные. Плюс они немного отличаются от тех JSON-ответов что формирует стандартный метод to_json т.к. я использую плагин ext_scaffold.

* * *