Rails 5: отношения "многие-ко-многим" и контроллеры

Согласно предыдущему Почта, я понимаю, как настроить свои таблицы / модели, чтобы я мог установить отношение "многие ко многим".

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

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

Пользователь хранит информацию о пользователе.

user.rb

class User < ApplicationRecord
  has_many :mealselections
  has_many :meals, through: :mealselections
  accepts_nested_attributes_for :mealselections
end

Еда используется для отображения информации о питании для всех пользователей. (название_питания, описание, img_url)

food.rb

class Meal < ApplicationRecord
  has_many :mealselections
  has_many :users, through: :mealselections
end

Выбор еды - это объединенная таблица, которая ссылается на блюда, выбранные пользователем, а затем к этой таблице добавляется дополнительный целочисленный столбец, который обозначает количество блюд, которые они хотят для каждого выбора блюд.

foodselection.rb

class MealSelection < ApplicationRecord
  belongs_to :user
  belongs_to :meals
end

Итак, я заблудился, как использовать контроллер, чтобы иметь возможность выполнять функции CRUD из одной формы. Это имело больше смысла, когда у меня была связь один-к-одному, поскольку я просто обновлял столбцы (food1, food2, food3) для связанного пользователя, и каждый столбец food # был создан со значением по умолчанию 0.

Однако теперь из-за того, как работают отношения «многие-ко-многим», я понимаю, что пользователь должен как минимум создавать и обновлять столбцы из одной и той же формы.

Поскольку я показываю это на одной странице (домашней странице), как мне сделать это в соответствующем HomeController с помощью одной формы / запроса?

Мне кажется, что на самом деле вы хотите, чтобы пользователь сделал на странице добавление / удаление MealSelections для заказа. Очень сложно смоделировать отношения «многие ко многим» с пользователем на плоской странице. Лично я бы набросал, как будет выглядеть страница / какие кнопки есть у пользователя, и использовал бы это, чтобы спланировать, что вы делаете. Истинное моделирование отношения «многие ко многим» на одной странице окажется довольно сложным, но страница для редактирования MealSelections одного заказа должна оказаться довольно простой.

user3334690 29.10.2018 19:09

Вы абсолютно правы, мне стоит сосредоточиться только на MealSelections, поскольку это единственное, что активно меняется. Также полезно знать, что моделирование "многие-ко-многим" на одной странице - это не то, что легко выполнить. Спасибо.

sgt_disco 29.10.2018 19:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
75
1

Ответы 1

Хотя содержимое http://railscasts.com/episodes/196-nested-model-form-revised немного устарело, оно демонстрирует общую технику, которая включает изменение формы, когда пользователь делает выбор для создания, удаления или изменения полей вложенных моделей с помощью javascript. Этот основной принцип все еще широко используется, поскольку он опирается на логику вложенных атрибутов по умолчанию в контроллере и механизмы массового обновления модели. Возможно, вам придется внести некоторые незначительные изменения, поскольку строгие параметры являются фактором, влияющим на более современные приложения, чем это было обычно во время создания контента. Взгляните на код для рассматриваемой формы и действий контроллера, что также может помочь с более конкретным ответом.

Я попытаюсь использовать упрощенную настройку, как указано в комментарии к моему вопросу, но эта информация полезна, если я чувствую, что мне нужно расширить функциональность в будущем. Спасибо.

sgt_disco 29.10.2018 20:00

Другие вопросы по теме