#ruby-on-rails #json #rest #extjs #extjs4
#ruby-on-rails #json #остальное #extjs #extjs4
Вопрос:
Я пытаюсь создать простое CRUD-приложение, используя ExtJS4 и Ruby на Rails. Я пытаюсь реализовать хранилище данных resftul с помощью JSON.
У меня проблема с обновлением записи. Запрос отправляется на сторону сервера, и база данных обновляется, но в хранилище данных у меня все еще есть запись, помеченная как «грязная». И когда я пытаюсь обновить другую запись, мне отправляются два запроса (один для предыдущей записи, а другой для следующей записи).
Также у меня возникли проблемы с созданием новой записи. На стороне сервера создается запись, но в моем хранилище данных она по-прежнему помечена как несохраненная (грязная), поэтому во время следующего действия по обновлению / созданию эта запись снова отправляется на сервер, и в результате у меня дублируются записи в моей базе данных.
Вопрос в том, как создать действительное хранилище данных и соответствующую модель для работы с restful json из Rails?
Исходники моего приложения вы можете найти в моей учетной записи на github:https://github.com/lucassus/extjs4-account-manager
хранилище: https://github.com/lucassus/extjs4-account-manager/blob/master/public/javascripts/app/store/Users.js и модель: https://github.com/lucassus/extjs4-account-manager/blob/master/public/javascripts/app/model/User.js
Ответ №1:
Причина этого в том, что ExtJS JsonReader ожидает, что корень ‘users’ будет массивом. Это означает, что когда он просто возвращает один пользовательский объект из ваших действий создания и обновления, он не может его правильно проанализировать, поэтому некорректно обновляет модели, чтобы отметить полученные изменения и, следовательно, удалить грязный флаг.
Чтобы это сработало, вы можете изменить формат строк в ваших действиях rails в соответствии с этим:
format.json { render :json => { :success => true, :users => [@user] } }
(Обратите внимание на квадратные скобки, обозначающие однопользовательский объект)
Затем это приведет к правильному обновлению грязных флагов.