У меня есть объект модели ActiveRecord Foo
; он представляет стандартную строку базы данных.
Я хочу иметь возможность отображать модифицированные версии экземпляров этого объекта. Я хотел бы повторно использовать сам класс, так как в нем уже есть все крючки и аспекты, которые мне понадобятся. (Например: у меня уже есть представление, отображающее соответствующие атрибуты). В основном я хочу клонировать экземпляр модели, изменить некоторые из его свойств и вернуть его вызывающему абоненту (просмотр, тест и т. д.).
Я не хочу, чтобы эти изменения атрибутов возвращались в базу данных. Однако я хочу включить атрибут id
в клонированную версию, так как это значительно упрощает работу с route-helpers. Таким образом, я планирую вызвать ActiveRecord::Base.clone()
, вручную установить идентификатор клонированного экземпляра, а затем внести соответствующие изменения атрибутов в новый экземпляр. Однако это меня беспокоит; один save()
в модифицированном экземпляре, и мои исходные данные будут стерты.
Итак, я хочу заблокировать новый экземпляр, чтобы он не повредил чему-либо еще. Я уже планирую вызвать freeze()
(при том понимании, что это предотвратит дальнейшее изменение объекта, хотя документация не очень ясна). Однако я не вижу очевидного способа предотвратить сохранение().
Каков наилучший подход к достижению этого?