Несколько вариантов:
1) Добавьте номер версии к вашей модели. На дневной работе мы планируем курс. Определенный курс может периодически обновляться, но по причинам бизнес-правил важно знать, как он выглядел в день вашей регистрации. Добавьте :version_number
к модели и find_latest_course(course_id)
, измените код соответствующим образом, немного перемешайте. В этом случае вы не «редактируете» модели столько, сколько сохраняете новую обновленную версию. (Тогда, очевидно, ваши LineItems несут item_id
и item_version_number
.)
Этот универсальный шаблон может быть расширен, чтобы охватить, содрогнуться, контрольные журналы.
2) Копирование данных в LineItem
объекты в LineItem
время создания . То, что вы можете ударить has_a
по любому, не означает, что вы должны это делать. Если предполагается, что «LineItem» содержит постоянную запись одного элемента, который появился в счете, то LineItem
содержит постоянную запись одного элемента, который появился в счете. Затем вы можете обновить InventoryItem#current_price
по своему желанию, не затрагивая ранее сохраненные LineItems
.
3) Если вы ленивый, просто заморозьте цену на объекте заказа. Не очень, чтобы рекомендовать это, но, эй, это работает в крайнем случае. Вы, вероятно, просто откладываете день расплаты.
"Я заказал у вас 6 месяцев назад и сейчас делаю налоги. Почему ваш книжный магазин не покажет мне половину книг, которые я заказал? ! Мне нужно знать, за что я могу получить отчисления! "