У меня есть класс модели ActiveRecord Foo
, имеющий has_many Bar
. Я хочу клонировать Foo (чтобы получить дубликаты большинства его атрибутов), а затем изменить его экземпляры Bar.
Это проблема, потому что клонированные экземпляры ActiveRecord совместно используют один и тот же связанный массив; изменения одного влияют на другое.
f1 = Foo.new
b = Bar.new
f1.bars << b
f2 = f1.clone
f2.bars.includes? b # true
f1.bars.clear
f2.bars.includes? b # now false
Реальная проблема в том, что я не могу отсоединить массивы баров от Foo:
f1.bars << b
f2.bars.includes? b # true
f2.bars = []
f2.bars.includes? b # now false
f1.bars.includes? b # now also false
Если бы я мог сделать это, то я мог бы заменить Бары, как я хотел. Однако любое изменение одного Foo, похоже, влияет на другое.
Примечание: я работаю на Rails 3 Beta 2; это может быть фактором здесь.
Обновление
Похоже, это может быть ошибка в Rails 3; Я создал отчет об ошибке здесь .