У вас здесь отношения многие ко многим. Каждое меню может иметь несколько блюд, и каждый Di sh может принадлежать нескольким меню. Итак, вам нужна таблица моста, скажем, «menu_items». Теперь структура будет выглядеть примерно так:
User [name, email, etc]
has_many: selections
has_many: menu_items, thorugh: selections
has_many: dishes, through: menu_items
Menu [start_data, end_date]
has_many: menu_items
has_many: dishes, through: menu_items
Dish [name]
has_many: menu_items
has_many: menus, through: menu_items
MenuItem [menu_id, dish_id]
belongs_to: menu
belongs_to: dish
Selection [menu_item_id, user_id]
belongs_to: user
belongs_to: menu_item
Я предлагаю вам go в документации, чтобы лучше понять логику c, стоящую за всем этим: https://guides.rubyonrails.org/association_basics.html