Pertanyaan Masalah dengan metode klon di Rails 3.2


Saya mencoba mengkloning salah satu objek saya hari ini, tetapi tampaknya itu tidak berfungsi seperti dalam dokumentasi.

Di konsol saya, saya melakukan:

u = User.find 1
nu = u.clone
nu.new_record?
   => false 
nu.new?
  NoMethodError: undefined method `new?' for #<User:0x007fbf137b8278>

Jadi sepertinya objek yang dikloning hanyalah duplikat, karena memiliki Id yang sama seperti yang lama, tetapi menurut dokumentasi, itu seharusnya objek baru?

klon()

Mengembalikan klon sumber daya yang belum diberi id dan diperlakukan sebagai sumber daya baru.

ryan = Person.find (1)

not_ryan = ryan.clone

not_ryan.new? # => benar


4
2018-01-27 20:12


asal


Jawaban:


Menurut dokumen sudah ditinggalkan sejak Rails 2.3.8 dan mungkin telah dihapus sejak itu. Jadi sebenarnya Anda menelepon Objek # klon yang biasa dipanggil ActiveRecord :: Base # initialize_copy yang dihapus di Rails 3.0.9.

Menggunakan dup sebagai gantinya.


14
2018-01-27 20:21



Ini adalah cara yang buruk untuk para pengupgrade: memanggil 'kloning' tidak akan membuat kesalahan atau apa pun - itu hanya akan mengembalikan model asli. Jadi kode apa pun yang Anda tulis yang seharusnya menduplikasi beberapa model dan melakukan modifikasi pada salinan baru akan secara diam-diam memodifikasi dokumen asli!


1
2018-02-07 22:27