假设我有一篇博客文章,其中包含rails中的注释,如何克隆它,以便我有另一篇带有注释的博客帖子,这两篇文章都作为新对象存储在数据库中并带有自己的ID?
我知道克隆命令,但它似乎没有复制注释 - 只链接到它们。
是否有插件或简单方法在rails中执行此操作?
谢谢!
答案 0 :(得分:2)
为什么要使用插件?这真的很简单。
Post
答案 1 :(得分:2)
由于深度复制/克隆对于每个Model类看起来都不同,因此通常将其作为练习留给开发人员。这有两种方式:
覆盖克隆(如果你总是想要这种行为,可能会很危险)
class Post
...
def clone
new_post = super
new_post.comments = comments.collect { |c| c.clone }
new_post
end
...
end
创建deep_clone或deep_copy方法并专门调用
class Post
...
def deep_clone
new_post = clone
new_post.comments = comments.collect { |c| c.clone }
new_post
end
...
end
这两个都保证返回的Post对象及其所有注释都是db中的不同实体(当然,当你在Post上调用save时)。
答案 2 :(得分:1)
定义深层复制方法
class BlogPost
...
def deep_copy
Marshal::load(Marshal.dump(self))
end
...
end
这应该可以做到! 编辑:只是为了澄清,你正在用这个方法做什么基本上是将你的对象序列化到内存然后在新的内存位置反序列化,有效地创建一个与原始对象具有相同字段值的新对象。