2017-02-22 63 views
0

Я пытаюсь выяснить, какие будут соответствующие ассоциации ActiveRecord для моих моделей. Я строю еды настройки и упорядочения системы для веб-сайта, где Пользователи могут выбрать из ряда Элементы и построить Meal и повторить это несколько раз для одного ордена.Пользователь, заказ, еда, товар и их ассоциации ActiveRecord

Моя текущая настройка выглядит следующим образом:

пользователя

has_many :orders, :dependent => :destroy 
has_many :meals, through: :orders 

Заказать

belongs_to :user 
has_and_belongs_to_many :meals 

Meal

has_and_belongs_to_many :orders 
has_and_belongs_to_many :items 

Item

has_and_belongs_to_many :meals 

Я полагаю, мой вопрос, то придет на две части:

1) не моя текущая настройка позволяет для нескольких элементов, которые будут отнесены к одной еде, и, возможно, другие блюда для одного заказа.

2) смогу ли я получить доступ к предыдущим приемам пользователя, чтобы обеспечить ярлык при создании новых заказов.

благодарит кучу заблаговременно от вопроса в первый раз!

ответ

0

К вашему первому вопросу, да, вы установили взаимосвязь «многие-ко-многим» между вашими приемами пищи и предметами (при условии, что у вас также правильно указаны столбцы базы данных).

К вашему второму вопросу, возможно, придется запросить у него специальный запрос, так как я не уверен, что активная запись настроена для выполнения многоуровневого запроса, который вы просите (т. Е. Получить все блюда от все заказы для данного пользователя). Что-то вроде

past_meals = Set.new

users.orders.each {|o| past_meals += o.meals} бы, конечно, работать, но можно было бы сделать гораздо более эффективной, если вам нужно это.

Однако, хотя has_many_and_belongs_to действительно работает для того, что вы делаете, использование его не рекомендуется. Сообщество гораздо больше выступает за то, чтобы создать таблицу соединений, в которой есть отношение has_many_through.

Вы никоим образом не должны это делать, но большинство людей предложит это, и это может сэкономить вам некоторую работу по дороге.

 Смежные вопросы

  • Нет связанных вопросов^_^