También te puede interesar la gema Amoeba para ActiveRecord 3.2.
En su caso, es probable que desee hacer uso de los nullify
, regex
o prefix
las opciones disponibles en el DSL configuración.
Es compatible con fácil y automática la duplicación recursiva de has_one
, has_many
y has_and_belongs_to_many
asociaciones, preprocesamiento de campo y una DSL configuración altamente flexible y potente que se puede aplicar tanto al modelo y sobre la marcha.
asegúrese de consultar la documentación de Amoeba, pero el uso es bastante fácil ...
sólo
gem install amoeba
o agregar
gem 'amoeba'
a tu Gemfile
luego agregue el bloque de ameba a su modelo y ejecute el dup
método como de costumbre
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
También puede controlar qué campos se copian de varias maneras, pero, por ejemplo, si desea evitar que los comentarios se dupliquen pero desea mantener las mismas etiquetas, puede hacer algo como esto:
class Post < ActiveRecord::Base
has_many :comments
has_and_belongs_to_many :tags
amoeba do
exclude_field :comments
end
end
También puede preprocesar campos para ayudar a indicar unicidad con prefijos y sufijos, así como expresiones regulares. Además, también hay numerosas opciones para que pueda escribir en el estilo más legible para su propósito:
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 recursiva de asociaciones es fácil, solo habilite ameba en modelos secundarios también
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 configuración DSL tiene aún más opciones, así que asegúrese de consultar la documentación.
¡Disfrutar! :)
q = p.clone
, y luegop == q
,true
regreso. Por otro lado, si lo usoq = p.dup
,false
vuelvo al compararlos.