ruby-on-rails - rails在创建新记录时删除旧记录
问题描述
这是我的条件:我有一个名为的模型Game
和一个名为 的模型GameLevel
,它们的关系类似于下面的代码:
class Game < ApplicationRecord
has_many :game_level
class GameLevel < ApplicationRecord
belongs_to :game
这是我的情况:
当 aGame
有一个GameLevel
which name isdefault
时,它不应该有low
, medium
, high
;
当 aGame
具有GameLevel
名称为low
, medium
,的 a 时high
,它不应该具有default
。
那么如何default
在创建(或在记录存在时更新)时low, medium, high
删除,以及如何在 Rails 模型中low ,medium, high
创建(或在记录存在时更新)时删除?default
解决方案
您可以使用此处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
对于破坏你可以看看这里
推荐阅读
- twitter-bootstrap - Bootstrap 4 响应式表格:如何固定列宽并使表格始终占据父元素的 100% 宽度?
- typescript - 打字稿:收集对象数组的属性的所有字符串文字
- x86 - Grub 报告“不支持标签 0x0a”
- c# - Peek 如何在启用分区的服务总线队列中工作?
- javascript - Android 键盘在 Chrome 中不显示时是焦点()
- python - 为什么项目在 pandas 列中,而不是它们所在的 pandas 列中?
- android - MVVM模式的数据处理
- python - Pandas:使用正则表达式进行选择性替换(基于不同列的过滤器)
- c++ - 为什么即使我正在使用记忆,我也会得到 TLE?
- facebook-graph-api - Facebook oEmbed 要求应用处于实时模式