这是我的条件:我有一个名为Game
的模型和一个名为GameLevel
的模型,它们的关系类似于下面的代码:
class Game < ApplicationRecord
has_many :game_level
class GameLevel < ApplicationRecord
belongs_to :game
这是我的情况:
当Game
具有GameLevel
的{{1}}时,它不应具有default
,low
,medium
; >
当high
具有Game
,GameLevel
,low
的{{1}}时,它不应具有medium
。
那么,在创建(或在记录存在时更新)high
时如何删除default
,以及在创建(或在记录存在时更新)default
时如何删除{ {1}}在Rails模型中?
答案 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