Ruby on rails Rails克隆对象问题
假设我在rails中有一篇带有注释的博客文章,我如何克隆它,以便我有另一篇带有注释的博客文章,这两篇文章都以新对象的形式存储在数据库中,并带有它们自己的ID 我知道clone命令,但它似乎没有复制到注释上,只是复制到注释的链接 在rails中是否有插件或简单的方法来实现这一点Ruby on rails Rails克隆对象问题,ruby-on-rails,clone,Ruby On Rails,Clone,假设我在rails中有一篇带有注释的博客文章,我如何克隆它,以便我有另一篇带有注释的博客文章,这两篇文章都以新对象的形式存储在数据库中,并带有它们自己的ID 我知道clone命令,但它似乎没有复制到注释上,只是复制到注释的链接 在rails中是否有插件或简单的方法来实现这一点 谢谢 定义深度复制方法 class BlogPost ... def deep_copy Marshal::load(Marshal.dump(self)) end ... end 这应该能奏效!
谢谢 定义深度复制方法
class BlogPost
...
def deep_copy
Marshal::load(Marshal.dump(self))
end
...
end
这应该能奏效!
编辑:只是想澄清一下,你用这个方法做的基本上是将你的对象序列化到内存中,然后在一个新的内存位置反序列化它,有效地创建一个新对象,它的字段值与原来的相同。你为什么要使用插件?这真的很简单
Post
由于每个模型类的深度复制/克隆看起来都不一样,因此通常留给开发人员作为练习。这里有两种方法:
class Post
...
def deep_clone
new_post = clone
new_post.comments = comments.collect { |c| c.clone }
new_post
end
...
end
这两种方法都保证返回的Post对象及其所有注释在db中都是不同的实体(当然,一旦您在帖子上调用save)。如果我有以下结构:Blog-id 1,Comment-id 1,它会被克隆为:Blog-id 2,Comment-id 2还是:Blog-id 1,Comment-id 1?谢谢它将包含相同的值,因此Blog#id=1,Comment#id=1。不管怎样,你为什么不立即启动你的irb并进行测试呢?祝你一切顺利!谢谢-这种方法在某些情况下确实有用:)这是我计划依赖的默认解决方案。然而,用新id做深度克隆的东西会很棒。
class Post
...
def deep_clone
new_post = clone
new_post.comments = comments.collect { |c| c.clone }
new_post
end
...
end