У меня есть следующий сценарий:
У меня есть веб-портал rails (Rails 3.1), и я использую RestKit 0.9.3 (новейшая версия) для подключения портала с устройства iOS.
Я хочу отобразить структуру данных с сервера на базовую модель данных на устройстве iOS. Модель выполнена следующим образом:
Классы
- Пользователь
- Роль
- Сообщение
- Комментарий
Отношения
- Пользователь имеет ноль или одну роль / Роль может иметь несколько пользователей
- У пользователя есть несколько сообщений / У сообщения есть один пользователь
- В сообщении есть несколько комментариев / В комментарии есть одно сообщение
Проблема в том, что отображение отношений по умолчанию в RestKit приводит к огромным сообщениям и избыточной передаче, потому что когда я отправляю / получаю Роли, все пользователи также передаются, а если я отправляю / получаю пользователей, роль добавляется к каждому пользователю. То же самое происходит с пользователями, сообщениями и комментариями.
Это просто для большого количества данных, и лучшее решение, насколько я могу подумать, это просто отправить идентификаторы, на которые ссылаются, и передать каждый тип.
Это прекрасно работает, когда я отправляю данные с устройства iOS на сервер, сопоставляя идентификаторы роли с полем «role_id» в User, потому что Rails понимает, что с этим делать. Таким образом, отношения отображаются не как отношения, а как поля идентификаторов. Но когда я получаю Пользователи с сервера, которого нет на устройстве, я получаю сообщение об ошибке, потому что RestKit не понимает, что делать с отображением, поскольку нет объекта Role, связанного с объектом User.
Итак, я исследовал и обнаружил, что вы можете отобразить отношения и использовать сопоставление первичного ключа, чтобы RestKit отправлял только Первичный ключ роли. Но сейчас Rails не понимает, что с этим делать.
Это выглядит примерно так:
{
"Идентификатор": 1,
"UID": "my_user_name",
"PWD": "my_password",
"роль": {
"Идентификатор": 0
}
}
Но Rails ожидает что-то вроде этого:
{
"Идентификатор": 1,
"UID": "my_user_name";
"PWD": "my_password",
"Role_id": 0
}
Это мое текущее состояние, и я действительно не знаю, как решить это недоразумение.
Буду очень благодарен за любую помощь!