【发布时间】:2015-07-17 09:11:45
【问题描述】:
我需要知道 Rails dup 和 clone 方法的区别,因为 dup 复制了 id 属性,而 clone 没有:
juan:~/alhambra$ rails c
Loading development environment (Rails 3.0.1)
1.9.3-p551 :001 > @user=User.last
=> #<User id: 2, email: "ferbad12@hotmail.com", encrypted_password: "$2a$10$/Fsz8DZ9PQbReTU1.wyxS.m3IOxZSV3siKDrrtUJdupz...", password_salt: "$2a$10$/Fsz8DZ9PQbReTU1.wyxS.", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-05-06 23:34:20", last_sign_in_at: "2015-05-06 23:34:20", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2015-05-06 23:33:37", updated_at: "2015-05-06 23:34:20">
1.9.3-p551 :002 > @user.clone
=> #<User id: nil, email: "ferbad12@hotmail.com", encrypted_password: "$2a$10$/Fsz8DZ9PQbReTU1.wyxS.m3IOxZSV3siKDrrtUJdupz...", password_salt: "$2a$10$/Fsz8DZ9PQbReTU1.wyxS.", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-05-06 23:34:20", last_sign_in_at: "2015-05-06 23:34:20", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2015-05-06 23:33:37", updated_at: "2015-05-06 23:34:20">
1.9.3-p551 :003 > @user.dup
=> #<User id: 2, email: "ferbad12@hotmail.com", encrypted_password: "$2a$10$/Fsz8DZ9PQbReTU1.wyxS.m3IOxZSV3siKDrrtUJdupz...", password_salt: "$2a$10$/Fsz8DZ9PQbReTU1.wyxS.", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-05-06 23:34:20", last_sign_in_at: "2015-05-06 23:34:20", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2015-05-06 23:33:37", updated_at: "2015-05-06 23:34:20">
【问题讨论】:
-
关于它的好博文:jvanbaarsen.com/blog/2014/07/01/ruby-on-rails-dup-vs-clone; tl;dr:
clone将创建一个 ActiveRecord 对象,其更改会影响原始对象;dup创建一个新的 ActiveRecord 对象(没有id)。 -
@numbers1311407: The answer by jvalanen 是该线程中唯一相关的,因为大多数其他答案以及问题都是关于 Ruby,而不是 Rails/AR。
-
我的控制台正在发生的事情。 Dup 正在复制 id,而 clone 正在复制 id
-
正如@Amadan 所指出的,这不是重复的,但它也不仅仅是
dup和clone的Rails 实现特有的问题。它询问为什么dup和clone没有给出预期的结果,结果证明在 Rails 3 和 4 之间方法角色完全颠倒了。如果措辞稍有不同,这可能是一个足够常见的混淆原因,可以证明问题的存在。
标签: ruby-on-rails ruby ruby-on-rails-3