rails在创建新记录的同时删除旧记录

时间:2018-11-21 08:25:52

标签: ruby-on-rails model

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

class Game < ApplicationRecord
  has_many :game_level

class GameLevel < ApplicationRecord
  belongs_to :game

这是我的情况:

Game具有GameLevel的{​​{1}}时,它不应具有defaultlowmedium

high具有GameGameLevellow的{​​{1}}时,它不应具有medium

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

2 个答案:

答案 0 :(得分:1)

您可以使用here中提到的before_save回调 并且您应该使用game_levels代替game_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

要破坏,可以查看here

答案 1 :(得分:1)

您可以使用以下代码

class GmaeLevel < ApplicationRecord
    belongs_to :game
    before_save :update_date
    private
       def update_date
           self.name == "default" ? self.game.game_levels.(name: ["low","medium","high"]).destroy_all : self.game.game_levels.where(name: "default").destroy
       end
end