Vous aimerez peut-être aussi la gemme Amoeba pour ActiveRecord 3.2.
Dans votre cas, vous souhaiterez probablement utiliser le nullify
, regex
ouprefix
des options disponibles dans le DSL de configuration.
Il prend en charge la duplication récursive facile et automatique has_one
, has_many
et les has_and_belongs_to_many
associations, le prétraitement sur le terrain et une configuration DSL hautement flexible et puissante qui peut être appliquée à la fois au modèle et à la volée.
assurez-vous de consulter la documentation d'Amoeba 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 dup
méthode comme d'habitude
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 seront copiés de nombreuses manières, mais par exemple, si vous vouliez empêcher la duplication des commentaires mais que vous vouliez conserver les mêmes balises, vous pourriez 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 pour aider à indiquer l'unicité des préfixes et suffixes ainsi que des regex. En outre, il existe également de nombreuses options pour que vous puissiez écrire dans le style le plus lisible à votre intention:
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, activez simplement l'amibe sur les modèles enfants
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
La configuration DSL a encore plus d'options, alors assurez-vous de consulter la documentation.
Prendre plaisir! :)
q = p.clone
, puisp == q
jetrue
reviens. En revanche, si j'utiliseq = p.dup
, jefalse
reviens en les comparant.