Какой самый простой способ дублировать запись активной записи? - PullRequest
391 голосов
/ 13 сентября 2008

Я хочу сделать копию записи активной записи, меняя одно поле в процессе (в дополнение к id ). Какой самый простой способ сделать это?

Я понимаю, что могу создать новую запись, а затем перебрать каждое из полей, копируя данные по полю, - но я подумал, что должен быть более простой способ сделать это ...

, таких как:

 @newrecord=Record.copy(:id)  *perhaps?*

Ответы [ 11 ]

0 голосов
/ 28 октября 2015

Вы также можете проверить acts_as_inheritable драгоценный камень.

"Acts As Inheritable - это Ruby Gem, специально написанный для моделей Rails / ActiveRecord. Он предназначен для использования с Self-Referential Association или с моделью, имеющей родителя, который имеет общие наследуемые атрибуты . Это позволит вам наследовать любой атрибут или отношение от родительской модели. "

Добавив acts_as_inheritable к своим моделям, вы получите доступ к следующим методам:

inherit_attributes

class Person < ActiveRecord::Base

  acts_as_inheritable attributes: %w(favorite_color last_name soccer_team)

  # Associations
  belongs_to  :parent, class_name: 'Person'
  has_many    :children, class_name: 'Person', foreign_key: :parent_id
end

parent = Person.create(last_name: 'Arango', soccer_team: 'Verdolaga', favorite_color:'Green')

son = Person.create(parent: parent)
son.inherit_attributes
son.last_name # => Arango
son.soccer_team # => Verdolaga
son.favorite_color # => Green

inherit_relations

class Person < ActiveRecord::Base

  acts_as_inheritable associations: %w(pet)

  # Associations
  has_one     :pet
end

parent = Person.create(last_name: 'Arango')
parent_pet = Pet.create(person: parent, name: 'Mango', breed:'Golden Retriver')
parent_pet.inspect #=> #<Pet id: 1, person_id: 1, name: "Mango", breed: "Golden Retriver">

son = Person.create(parent: parent)
son.inherit_relations
son.pet.inspect # => #<Pet id: 2, person_id: 2, name: "Mango", breed: "Golden Retriver">

Надеюсь, это поможет вам.

...