Vous pouvez également aimer le Gemme amibe pour ActiveRecord 3.2.
Dans votre cas, vous voudrez probablement utiliser l'outil de gestion de l'information. nullify
, regex
ou prefix
les options disponibles dans le DSL de configuration.
Il prend en charge la duplication récursive facile et automatique de has_one
, has_many
y has_and_belongs_to_many
les associations, le prétraitement sur le terrain et un DSL de configuration très souple et puissant qui peut être appliqué à la fois au modèle et à la volée.
n'oubliez pas de consulter le Documentation sur les amibes mais l'utilisation est assez facile...
juste
gem install amoeba
ou ajouter
gem 'amoeba'
à votre Gemfile
puis ajoutez le bloc amibe à votre modèle et exécutez la commande dup
méthode habituelle
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
Vous pouvez également contrôler les champs qui sont copiés de nombreuses façons, mais par exemple, si vous voulez empêcher les commentaires d'être dupliqués mais que vous voulez conserver les mêmes balises, vous pouvez faire quelque chose comme ceci :
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
Vous pouvez également prétraiter les champs afin d'indiquer leur caractère unique à l'aide de préfixes, de suffixes et de regex. En outre, de nombreuses options vous permettent d'écrire dans le style le plus lisible pour votre objectif :
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 copie récursive des associations est facile, il suffit d'activer amoeba sur les modèles enfants également.
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
Le DSL de configuration offre encore plus d'options, alors n'oubliez pas de consulter la documentation.
Profitez-en ! :)