Möglicherweise gefällt Ihnen auch das Amöben-Juwel für ActiveRecord 3.2.
In Ihrem Fall möchten Sie wahrscheinlich die Verwendung der machen nullify
, regex
oder prefix
Optionen , die in der Konfiguration DSL.
Es unterstützt die einfache und automatische rekursive Vervielfältigung has_one
, has_many
und has_and_belongs_to_many
Vereinigungen, Feld Vorverarbeitung und eine hochflexible und leistungsstarke Konfiguration DSL , die sowohl auf das Modell angewandt werden können und im laufenden Betrieb .
Schauen Sie sich unbedingt die Amöben-Dokumentation an, aber die Verwendung ist ziemlich einfach ...
gerade
gem install amoeba
oder hinzufügen
gem 'amoeba'
zu deiner Gemfile
Fügen Sie dann den Amöbenblock zu Ihrem Modell hinzu und führen Sie die dup
Methode wie gewohnt aus
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
Sie können auch steuern, welche Felder auf verschiedene Weise kopiert werden. Wenn Sie jedoch verhindern möchten, dass Kommentare dupliziert werden, aber dieselben Tags beibehalten möchten, können Sie Folgendes tun:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
Sie können Felder auch vorverarbeiten, um die Eindeutigkeit sowohl mit Präfixen und Suffixen als auch mit regulären Ausdrücken anzuzeigen. Darüber hinaus gibt es zahlreiche Optionen, mit denen Sie für Ihren Zweck am besten lesbar schreiben können:
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
Das rekursive Kopieren von Assoziationen ist einfach. Aktivieren Sie Amöben auch für untergeordnete Modelle
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
Die Konfiguration DSL bietet noch mehr Optionen. Lesen Sie daher unbedingt die Dokumentation.
Genießen! :) :)
q = p.clone
und dannp == q
komme ichtrue
zurück. Auf der anderen Seite, wenn ich benutzeq = p.dup
, bekomme ichfalse
zurück , wenn ich sie vergleiche.