修改克隆的ActiveRecord对象上的关联数组

时间:2010-05-30 04:27:48

标签: ruby-on-rails ruby activerecord clone ruby-on-rails-3

我有一个has_many Foo的ActiveRecord模型类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特定的错误; I've created a bug report here

1 个答案:

答案 0 :(得分:2)

u = User.first
u.tickets.size # 12
u2 = u.clone
u2.tickets = u.tickets
u2.tickets.pop
u2.tickets.size # 11    
u.tickets.size  # 12

所以,你和u2现在有不同的门票数组