gpt4 book ai didi

ruby - 删除关联中的 default_scope

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:33 25 4
gpt4 key购买 nike

我有一个使用 Paranioa gem ( https://github.com/radar/paranoia ) 的模型,用于在数据库中保留已删除的 ActiveRecord 元素。 Paranioa 使用 deleted_at 列;当此列为 NULL 时,不会删除该对象。它使用默认范围工作,如下所示:

default_scope { where(:deleted_at => nil) }

我的问题是我想获取范围内的所有元素(包括已删除的元素):

class MyOtherModel < ActiveRecord::Base
has_many :paranoia_models
end

此声明生成如下查询:

SELECT * FROM `paranioa_models` WHERE `paranioa_models`.`deleted_at` IS NULL AND ...

用这样的函数很容易得到我所有的元素(包括删除的元素)

def paranioa_models_with_deleted
return self.paranioa_models.with_deleted
end

with_deleted unscope 默认作用域。

我的问题是:如何直接在 :has_many 范围内取消 MyOtherModel 范围内的 default_scope 范围?

您的解决方案:

  • has_many :paranoia_models, -> { unscoped } 仅返回未删除的
  • self.paranoia_models.unscoped 返回所有的 ParanoiaModel(包括属于其他人的 ParanoiaModel)

最佳答案

你试过吗?

def paranoia_models
ParanoiaModel.unscoped { super }
end

关于ruby - 删除关联中的 default_scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23867467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com