class Game
has_many :players, dependent: :destroy
end
class Player
belongs_to :game
end
假设我们有一个游戏和三个玩家相关联。
我们如何在不使用宝石的情况下以最简洁的方式复制这四条记录?
Here are two questions关于同一主题的SO,但要么使用宝石,要么看起来过于复杂。
答案 0 :(得分:2)
这段代码可以是一个开始:
class Game
has_many :players
def clone
attributes = self.attributes
['id', 'created_at', 'updated_at'].each do |ignored_attribute|
attributes.delete(ignored_attribute)
end
clone = Game.create(attributes)
self.players.each do |player|
player.clone.update_attributes(game_id: clone.id)
end
clone
end
end
class Player
belongs_to :game
def clone
attributes = self.attributes
['id', 'created_at', 'updated_at'].each do |ignored_attribute|
attributes.delete(ignored_attribute)
end
clone = Player.create(attributes)
clone
end
end
有了这个,您可以创建一个模块acts_as_clonable
,并将其包含在您的模型中,并提供一些选项:
class Game
has_many :players
acts_as_clonable relations: [:players], destroy_original: false, ignored_attributes: [:this_particular_attribute]
如果你有野心,你可以用这个制作宝石......; - )