Anda mungkin juga menyukai permata Amoeba untuk ActiveRecord 3.2.
Dalam kasus Anda, Anda mungkin ingin menggunakan nullify
, regex
atau prefix
opsi yang tersedia di DSL konfigurasi.
Ini mendukung duplikasi rekursif mudah dan otomatis has_one
, has_many
dan has_and_belongs_to_many
asosiasi, preprocessing lapangan dan DSL konfigurasi yang sangat fleksibel dan kuat yang dapat diterapkan baik untuk model dan on the fly.
pastikan untuk memeriksa Dokumentasi Amuba tetapi penggunaannya cukup mudah ...
hanya
gem install amoeba
atau tambahkan
gem 'amoeba'
ke Gemfile Anda
kemudian tambahkan blok amuba ke model Anda dan jalankan dup
metode seperti biasa
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
enable
end
end
class Comment < ActiveRecord::Base
belongs_to :post
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :posts
end
class PostsController < ActionController
def some_method
my_post = Post.find(params[:id])
new_post = my_post.dup
new_post.save
end
end
Anda juga dapat mengontrol bidang mana yang disalin dengan berbagai cara, tetapi misalnya, jika Anda ingin mencegah komentar agar tidak digandakan tetapi Anda ingin mempertahankan tag yang sama, Anda bisa melakukan sesuatu seperti ini:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
Anda juga bisa preprocess bidang untuk membantu menunjukkan keunikan dengan awalan dan sufiks serta regex. Selain itu, ada juga banyak opsi sehingga Anda dapat menulis dengan gaya yang paling mudah dibaca untuk tujuan Anda:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
include_field :tags
prepend :title => "Copy of "
append :contents => " (copied version)"
regex :contents => {:replace => /dog/, :with => "cat"}
end
end
Menyalin asosiasi secara rekursif itu mudah, cukup aktifkan amuba pada model anak juga
class Post < ActiveRecord::Base
has_many :comments
amoeba do
enable
end
end
class Comment < ActiveRecord::Base
belongs_to :post
has_many :ratings
amoeba do
enable
end
end
class Rating < ActiveRecord::Base
belongs_to :comment
end
Konfigurasi DSL memiliki lebih banyak opsi, jadi pastikan untuk memeriksa dokumentasi.
Nikmati! :)
q = p.clone
, dan kemudianp == q
, sayatrue
kembali. Di sisi lain, jika saya gunakanq = p.dup
, sayafalse
kembali ketika membandingkannya.