Как удалить статус «только чтение» из клонированной модели ActiveRecord? - PullRequest
3 голосов
/ 28 марта 2012

Я пишу функцию в своем приложении, которая используется для клонирования целой загрузки моделей activerecord и их иерархии.Чтобы я случайно не изменил исходные записи, я использую функцию #readonly в отношениях, и это здорово.

Я использую метод #clone для копирования этих исходных объектов, но, похоже, нет никакого способа удалить статус «только чтение» для клонированных объектов, что означает, что я не могу сохранить новые объекты, которые я создал.

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

Как я могу удалить состояние только для чтения?

Ответы [ 2 ]

11 голосов
/ 28 марта 2012

Использовать instance_variable_set?

my_obj = Object.where(:stuff, :readonly => true)
my_obj.x = "y" 
my_obj.save! #readonly exception
my_obj.send(:instance_variable_set, :@readonly, false)
my_obj.save! #succeeds

Я не уверен, что есть более чистый способ!

1 голос
/ 28 марта 2012

В зависимости от того, почему вы делаете это, может быть проще скопировать базу данных (например, mysqldump).

Если, с другой стороны, вам нужно сделать это в ruby, вы можетехотел бы взглянуть на deep_cloneable драгоценный камень:

original_record.dup :include => [:associated_records]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...