Я студент в процессе создания приложения для Android, которое может публиковать трек GPS в приложении Rails. Я хотел бы сделать вещи "Rails" и воспользоваться REST. На данный момент в моем приложении rails есть 3 модели: пользователи, треки и точки. Пользователь has_many отслеживает, а отслеживает has_many очки. Трек также имеет общую дистанцию. Точки имеют широту и долготу. Я успешно смог создать пустой трек с:
curl -i -X POST -H 'Content-Type: application/xml' -d '<track><distance>100</distance></track>' http://localhost:3000/users/1/tracks
Уууууууу! Это очень круто. Я действительно впечатлен, что рельсы делают это. Просто чтобы посмотреть, что произойдет, я попробовал следующее:
curl -i -X POST -H 'Content-Type: application/xml -d '<track><distance>100</distance><points><point><lat>3</lat><lng>2</lng></point></points></track>' http://localhost:3000/users/1/tracks
Fail! Сервер плюет обратно:
Обработка TracksController # create (для 127.0.0.1 в 2010-04-14 00:03:25) [POST]
Параметры: {"track" => {"points" => {"point" => {"lng" => "2", "lat" => "3"}}, "distance" => "100"} , "user_id" => "1"}
Пользовательская нагрузка (0,6 мс) SELECT * FROM "users" WHERE ("users". "Id" = 1)
ActiveRecord :: AssociationTypeMismatch (ожидается точка (# - 620976268), получен массив (# - 607740138)):
app / controllers / track_controller.rb: 47: в `create '
Кажется, мой track_controller не любит или не понимает, что он получает от объекта params в моем track_controller.rb:
def create
@track = @user.tracks.build(params[:track])
Мой xml может быть неправильным, но, по крайней мере, Rails, похоже, ожидает от него Point. Могу ли я в любом случае исправить TracksController.create, чтобы он мог анализировать xml дорожки с несколькими вложенными точками? Или есть другой способ, которым я должен делать это полностью?