Я испытываю немного затруднений, придумывающих правильный ответ на это, таким образом, я буду требовать своей проблемы здесь. Я работаю над УСПОКОИТЕЛЬНЫМ API. Естественно, у меня есть несколько ресурсов, некоторые из которых состоят из родителя к дочерним отношениям, некоторые из которых являются одинокими ресурсами. То, где я испытываю немного затруднений, выясняет, как сделать вещи легче для людей, которые будут создавать клиенты против моего API.
Ситуация - это. Гипотетически у меня есть 'уличный' ресурс. Каждая улица имеет несколько домов. Так улица: has_many в Дома и Дома: улица belongs_to. Если пользователь хочет запросить, чтобы HTTP Вошел в определенный домашний ресурс, следующее должно работать:
http://mymap/streets/5/homes/10
Это позволяет пользователю получать информацию для дома с идентификатором 10. Прямой. Мой вопрос, я нарушающий правила книги путем предоставления пользовательского доступа к:
http://mymap/homes/10
Технически тот домашний ресурс существует самостоятельно без улицы. Это имеет смысл, что это существует как свой собственный объект без улицы инкапсуляции, даже при том, что бизнес-логика говорит иначе.
Что лучший способ состоит в том, чтобы обработать это?
Править! В духе становления хорошим гражданином StackOverflow я возвратился с поддерживаемым блоком кода для того, как реализовать их выше.
map.resources :streets,
:has_many => :homes
:shallow => true
Это создаст оба типа маршрутов, которые я искал.
Если записи о вашем доме могут принадлежать только одной улице, то при индивидуальном изучении дома не возникнет путаницы. Вы по-прежнему сможете вернуться к связанной записи Street по любой причине.
Именно в ситуациях, когда у вас есть отношения «многие ко многим», деактивация структуры REST может вызвать у вас проблемы. Если конкретная запись имеет смысл только в определенном контексте, и вы удалите этот контекст, очевидно, есть путаница.
Я думаю, что в вашем конкретном случае вам может не понадобиться реализовывать оба подхода, вместо этого используйте более «плоский» подход, который снижает сложность URL-адреса.
Нет, именно так работают и часто используются неглубокие маршруты.
Мне очень нравится этот подход. Рекомендую прочитать. Вкратце, в этой статье говорится, что вы не должны вкладывать свои ресурсы более чем на 1 уровень. И если возможно, что вложенный ресурс можно обмелеть, то сделайте это.
В одном из своих приложений я действительно напортачил с вложенными ресурсами. Я погружаюсь даже в 3 или 4 глубины, и это становится кошмаром ...
Вложенность действительно хороша, если она упрощает работу. Если нет, брось!