Должен ли я воссоздать модель приложения Ruby on Rails 3 для соответствия ожидаемой службе REST? - PullRequest
0 голосов
/ 28 июня 2011

Я создаю веб-приложение, которое достаточно просто, я могу использовать многие стандартные функции Ruby on Rails 3 (добавление и удаление элементов модели и т. Д.).

Теперь я хочу выделить службу REST, которая возвращает иерархию элементов в одном потоке.

Например, в модели у меня есть:

  • ProductType, который определяет, какие комбинации ComponentTypes разрешены. Пример: подарочная корзина с несколькими бутылками вина и 3 фруктами.
  • ComponentTypes. Примеры: фрукты, винные бутылки и т. Д.
  • Компоненты: это воплощения типов компонентов. Примеры: Совиньон блан, Яблоко, Груша и т. Д.

Теперь я хотел бы предоставить службу отдыха «меню», которая отображает их иерархию. Это должно выглядеть примерно так:

  "menu": [
{ "name":"Gift basket", "description":"some description", "price": 0, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":true, "children":[
  { "name":"Wine", "description":"", "price": 0, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":true, "children":[
    { "name":"Sauvignon Blanc", "description":"...", "price": 170, "isDefaultSelected": true, "isMultiselect":false, "isContainer":false },
    { "name":"Merlot", "description":"...", "price": 170, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":false }
  ]
  },
  { "name":"Fruit", "description":"Fruits...", "price": 0, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":true, "children":[
    { "name":"Apple", "description":"...", "price": 170, "isDefaultSelected": true, "isMultiselect":false ,"isContainer":false },
    { "name":"Pear", "description":"...", "price": 170, "isDefaultSelected": false, "isMultiselect":false ,"isContainer":false }
  ]
  }
]
}

Исходя из этого, клиент должен создать меню, в котором элементы со свойством isMultiselect являются флажками. Некоторые атрибуты, возможно, являются избыточными (isMultiselect может просто находиться в верхней части иерархии), но у нас есть требование, чтобы все элементы были идентичными.

Поэтому мой вопрос заключается в том, должен ли я создать новую модель для представления объектов, которые я хочу иметь в нашей службе REST, или могу ли я отобразить имеющиеся у меня объекты в соответствии с вышеуказанной схемой JSON.

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Немного неясно, что такое «меню». Это просто список ProductTypes? Есть ли несколько меню?

Что касается общего вопроса - да, вы должны иметь возможность использовать существующие ресурсы, определенные для вашего фида JSON. Если вам нужно настроить фид JSON (например, включить дочерние ресурсы), вы можете сделать это, используя метод respond_with:

respond_to :html, :json

def show
   @product_types = ProductType.all

   respond_with(@product_types, :include => [:component_types => :components])
end
0 голосов
/ 28 июня 2011

Я бы посоветовал заглянуть в камень awesome_nested_set , чтобы увидеть, можете ли вы представить свою иерархию таким образом.По сути, вам нужно добавить 3 новых столбца в существующую модель, и вы получите поддержку стандартного дерева.Затем вы можете добавить один или два простых маршрута к соответствующему контроллеру, и вам будет хорошо идти.

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