Причиной использования отношения «есть» и «принадлежит» (через взаимность: через отношение или иным образом) является повторное использование объектов с любой стороны.
Рассматривали ли вы использование модели расширенного соединения? Кажется, ваша модель workout_assignments уже соответствует столбцу date_assigned. Теория состоит в том, что ваша модель соединения включает в себя данные, специфичные для этого назначения. Таким образом, вам потребуется только одна копия каждого общего элемента тренировки и использовать модель назначений тренировки для хранения отдельных инструкций.
Вот как я бы предложил реализовать это:
Адаптируйте workout_assignments для включения специальных инструкций для спортсмена. Все, что вам нужно сделать, это добавить столбец в таблицу workout_assignments, я буду называть его special_instructions
, но вы можете называть его как хотите.
В методе up новой миграции:
add_column :workout_assignments, :special_instructions, :string
Вот и все. Не обязательно отображать специальные инструкции в дополнение к описанию тренировки при отображении ее спортсмену / тренеру. Есть кое-что, что вы можете сделать, чтобы облегчить переход ссылки на workout_assignments вместо тренировок.
Посмотрите на делегирование, пользовательские средства доступа и использование опции: include в ассоциации has_many. Для вдохновения о том, как заставить эти модели работать лучше вместе. Идея состоит в том, что вы можете загружать связанные тренировки в любое время, когда загружаете назначение тренировки.
Делегирование - это метод, позволяющий передавать методы другим параметрам. По сути, создавая впечатление слияния двух моделей. В простейшем виде это выглядит примерно так:
def description
workout.description
end
Затем напишите пользовательский метод доступа для описания в workout_assignments, который выбирает описание для связанной тренировки и отображает его вместе со специальными инструкциями назначения.