Моделирование сортировки коллекции в режиме RESTful - PullRequest
1 голос
/ 01 мая 2011

У меня есть простое приложение рельсов, которое использует Mongoid.У меня есть родительский документ, встраивающий некоторые дочерние документы через embeds_many / embedded_in.Пользователь должен иметь возможность изменять порядок вложенных документов (двигаться вверх, двигаться вниз, двигаться вверх, ...).Интересно, как спроектировать это RESTful способом, используя существующую функциональность Rails, если это возможно.Я, конечно, могу создать действие контроллера, которое получает идентификатор детей и перемещает его.Но я думаю, что это не идея отдыха.С точки зрения REST это должно быть обновление контейнера, содержащего элементы.Но я понятия не имею, как это реализовать / спроектировать !?Любая подсказка или отправная точка?

Ответы [ 2 ]

0 голосов
/ 01 мая 2011

Часто у вас есть требования, которые не соответствуют идеально предопределенным глаголам REST, но это нормально, если вы соблюдаете дух REST.

Например, действие, которое регулирует положение существующего элемента, представляет собой запрос PUT с пользовательским глаголом. Вы можете определить один глагол position или несколько глаголов, например up и down, в зависимости от того, как вы предпочитаете это делать. В этом случае position может быть любым из top, bottom, up или down, если вы хотите реализовать их.

Добавление пользовательского маршрута довольно просто:

resources :items, :member => { :position => :put }

Это создаст новый глагол position и направит его к ItemsController#position соответственно.

0 голосов
/ 01 мая 2011

Обычно вы хотите использовать PUT для обновления существующего ресурса.В этом случае вы обновляете порядковый номер члена коллекции, поэтому вы просто делаете обновление.Проблема в том, что вы должны обновить порядковые номера каждого члена в коллекции, чтобы избежать коллизий и убедиться, что порядок однозначен.Таким образом, вы хотите обновить коллекцию целиком…

# routes.rb
resources :items do
  put '/sort' => 'items#sort', :on => :collection
end

# items_controller.rb
def sort
  # update your ordinals however you need
end

Вы можете обновить каждого члена для таких действий, как «перемещение в начало», но в большинстве случаев это проще для интерфейсауказать порядок всех элементов для каждого запроса на обновление.Другими словами, пользователь front-end / api указывает все идентификаторы элементов в том порядке, в котором они должны быть в качестве параметров для PUT /items/sort.

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