使 has_many :through 不可删除

Make has_many :through not deleteable

我在加入的模型上使用了活动标志,而不是删除它们。我如何指定一个条件来防止销毁这些条目的可能性?

您应该覆盖 model/models 中的 destroy 方法。

可以在这里找到类似的解决方案:

你也可以选择paranoia gem。这将使用 deleted_at 时间戳进行软删除,并添加必要条件以过滤掉 'deleted' 条记录。

如果想保留活跃栏目,可以阅读源码寻找灵感。基本上它只是为任何包含它的 class 添加一个默认范围,并通过以下方式替换销毁:

 def destroy
   transaction do
     run_callbacks(:destroy) do
       touch_paranoia_column
     end
   end
 end

所以代替

touch_paranoia_column

您可以使用

update_attribute(:active, true)

希望这对您有所帮助。

最好在 table 中创建一个新字段并将其命名为 is_deleted,数据类型为 boolean.And 更新它而不是破坏数据。