2016-04-14 2 views
0

название звучит странно, так же как и моя проблема ... Я создаю простое приложение - у меня есть модель ресторана, в которой есть много блюд, которые пользователи могут добавлять в свои тележки в качестве заказов (модель заказа имеет идентификатор еды и количество). Теперь я хотел бы иметь возможность добавлять варианты блюд - например, пицца будет иметь «маленький», «средний» и «большой» вариант, который повлияет на цену этого предмета. Как вы думаете, как лучше всего это реализовать? Моя проблема заключается в том, что каждый прием пищи может иметь разные варианты, а варианты могут иметь разные цены. Поэтому я не могу просто добавить атрибут «option» в качестве строки. С другой стороны, если я использую другую модель, было бы слишком много вложенности на маршрутах, которые я прочитал это плохая практика:Rails, реализовать опции для модели

resources :restaurants do 
    resources :meals do 
     resources :options 
    end 
end 

Как избежать этого? Спасибо за любые предложения!

ответ

0

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

resources :restaurants, shallow: true do 
    resources :meals do 
     resources :options 
    end 
end 

Если вы посмотрите на маршрутах сейчас (рейк маршрутов) вы увидите, сколько они меняются.

Но его стоит считать, что вам не нужны ресурсы для опций. Посетитель не будет создавать новые параметры. Они будут добавлять существующие опции в коллекцию (meal + option = order .. или что-то подобное) - так что у вас может быть только этот маршрут в пространстве имен admin для создания новых параметров для меню.

+0

Мне было не ясно, кто может добавлять еду ... Я бы хотел, чтобы пользователи могли это сделать - если кто-то является менеджером ресторана, он будет abe, чтобы добавить еду без доступа к панели администратора. Я нашел драгоценный камень (spree_flexi_variants), который делает именно то, что я хотел, но, к сожалению, не совместим с моим приложением: / –