Potrebbe piacerti anche la gemma Amoeba per ActiveRecord 3.2.
Nel tuo caso, probabilmente si vuole fare uso dei nullify
, regex
o prefix
opzioni disponibili nel DSL configurazione.
Supporta semplice e automatico la duplicazione ricorsiva di has_one
, has_many
e has_and_belongs_to_many
associazioni, campo di pre-elaborazione e un modem DSL di configurazione altamente flessibile e potente che può essere applicata sia al modello e al volo.
assicurati di consultare la documentazione Amoeba ma l'utilizzo è piuttosto semplice ...
appena
gem install amoeba
o aggiungi
gem 'amoeba'
al tuo Gemfile
quindi aggiungi il blocco ameba al tuo modello ed esegui il dup
metodo come al solito
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
Puoi anche controllare quali campi vengono copiati in molti modi, ma ad esempio, se volevi impedire la duplicazione dei commenti ma volevi mantenere gli stessi tag, potresti fare qualcosa del genere:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
È inoltre possibile preelaborare i campi per aiutare a indicare l'univocità con prefissi e suffissi nonché regex. Inoltre, ci sono anche numerose opzioni in modo da poter scrivere nello stile più leggibile per il tuo scopo:
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
La copia ricorsiva delle associazioni è semplice, basta abilitare l'ameba anche sui modelli figlio
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
Il DSL di configurazione ha ancora più opzioni, quindi assicurati di consultare la documentazione.
Godere! :)
q = p.clone
e poip == q
tornotrue
indietro. D'altra parte, se usoq = p.dup
,false
torno a confrontarli.