首页 > 解决方案 > rails在创建新记录时删除旧记录

问题描述

这是我的条件:我有一个名为的模型Game和一个名为 的模型GameLevel,它们的关系类似于下面的代码:

class Game < ApplicationRecord
  has_many :game_level

class GameLevel < ApplicationRecord
  belongs_to :game

这是我的情况:

当 aGame有一个GameLevelwhich name isdefault时,它不应该有low, medium, high;

当 aGame具有GameLevel名称为low, medium,的 a 时high,它不应该具有default

那么如何default在创建(或在记录存在时更新)时low, medium, high删除,以及如何在 Rails 模型中low ,medium, high创建(或在记录存在时更新)时删除?default

标签: ruby-on-railsmodel

解决方案


您可以使用此处before_save提到的回调 并且您应该使用而不是作为约定。game_levelsgame_level

作为一个例子,你可以写这样的东西;

class GameLevel < ApplicationRecord #or ActiveRecord::Base
  belongs_to :game
  before_save :remove_unnecessary

  private
    def remove_unnecessary
      if self.name == "default"
        self.game.game_levels.where(name: ["low", "medium", "high"]).destroy_all()
      end
      if ["low", "medium", "high"].any?{ |type| self.name == type }
        self.game.game_levels.where(name: "default").destroy_all()
      end
    end
end

对于破坏你可以看看这里


推荐阅读