首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby-1.9.2.p290或ruby-1.9.3中ActiveRecord对象的克隆更改

ruby-1.9.2.p290或ruby-1.9.3中ActiveRecord对象的克隆更改
EN

Stack Overflow用户
提问于 2012-08-24 13:22:15
回答 2查看 276关注 0票数 2

当我在ruby-1.9.2-p290中克隆一个简单的对象时,一切看起来都正常

代码语言:javascript
复制
class Klass
    attr_accessor :str
end
s1 = Klass.new         #=> #<Klass:0x401b3a38>
s1.str = "Hello"       #=> "Hello"
s2 = s1.clone          #=> #<Klass:0x401b3998 @str="Hello">
s2.str = "Hello world" #=> "Hello world"
s2                     #=> #<Klass:0x00000100977c40 @str="Hello world">
s1                     #=> #<Klass:0x00000100993fa8 @str="Hello">

但是当我克隆一个ActiveRecord对象时,奇怪的事情发生了:

我使用的是rails 3.1.8。加载开发环境(Rails 3.1.8)。当我启动“rails控制台”时。

代码语言:javascript
复制
ruby-1.9.2-p290 :001 > chair = Chair.new(:code => 'code', :description => 'The Description')
#=> #<Chair id: nil, code: "code", description: "The Description", user_id: nil, created_at: nil, updated_at: nil> 
ruby-1.9.2-p290 :002 > chair_clone = chair.clone
#=> #<Chair id: nil, code: "code", description: "The Description", user_id: nil, created_at: nil, updated_at: nil> 
ruby-1.9.2-p290 :003 > chair_clone.description = "Update description"
#=> "Update description" 
ruby-1.9.2-p290 :004 > chair_clone
#=> #<Chair id: nil, code: "code", description: "Update description", user_id: nil, created_at: nil, updated_at: nil>     
ruby-1.9.2-p290 :005 > chair
#=> #<Chair id: nil, code: "code", description: "Update description", user_id: nil, created_at: nil, updated_at: nil> 

原始对象“椅子”的描述属性也被更新了,这不是很奇怪吗?

我在http://apidock.com/ruby/Object/clone文档中发现了以下警告

ruby-1.9.3中ActiveRecord对象的克隆更改

我注意到,克隆ruby-1.9.3中的活动记录对象,然后更改原始对象的属性,实际上也会更改克隆的对象。这不是ruby-1.9.2中的情况。

这个问题已经有解决方案了吗?

提前感谢您的反馈。

Joost

EN

回答 2

Stack Overflow用户

发布于 2012-09-24 22:48:31

使用dup代替clone,如下所示:

..。

chair_clone = chair.dup

..。

票数 4
EN

Stack Overflow用户

发布于 2012-08-24 13:58:14

代码语言:javascript
复制
u = User.last
u.duplicable? # => true
u2 = u.dup
u2.email = 'wwwww'
u.email # => 'megacoder@rambler.ru'
u2.email # => 'wwwww'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12103532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档