Potrebbe piacerti anche la gemma Amoeba per ActiveRecord 3.2.
Nel tuo caso, probabilmente si vuole fare uso dei nullify, regexo prefixopzioni disponibili nel DSL configurazione.
Supporta semplice e automatico la duplicazione ricorsiva di has_one, has_manye has_and_belongs_to_manyassociazioni, 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 dupmetodo 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.clonee poip == qtornotrueindietro. D'altra parte, se usoq = p.dup,falsetorno a confrontarli.