class Game
has_many :players, dependent: :destroy
end
class Player
belongs_to :game
end
假设我们有一个游戏和三个与之关联的玩家。
我们如何在不使用任何 gem 的情况下,以最简洁的方式复制这四个记录?
这是 围绕同一主题的两个关于 SO 的问题,但要么使用宝石,要么看起来过于复杂。
class Game
has_many :players, dependent: :destroy
end
class Player
belongs_to :game
end
假设我们有一个游戏和三个与之关联的玩家。
我们如何在不使用任何 gem 的情况下,以最简洁的方式复制这四个记录?
这是 围绕同一主题的两个关于 SO 的问题,但要么使用宝石,要么看起来过于复杂。
这段代码可以作为一个开始:
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]
如果你有野心,你可以用这个制作宝石...... ;-)