0

在我的应用程序中,一个用户has_many :jobs和一个工作belongs_to :user。我正在使用 paranoia gem 软删除用户和作业。

假设我有一个用户 Joe,他有一份工作“推送更改”。我可以使用 来查看我的列表页面上的所有工作Job.all,但是一旦我删除 Joes 的帐户,我就看不到该工作正在使用Job.all了。

我曾尝试使用Job.with_deleted.all并尝试取消关联的范围belongs_to :user, -> { with_deleted }

生成的 SQL 语句:

SELECT "jobs".* FROM "jobs" INNER JOIN "users" ON "users"."id" = "jobs"."user_id" AND "users"."deleted_at" IS NULL WHERE "jobs"."deleted_at" IS NULL ORDER BY users.name ASC
4

3 回答 3

0

这似乎你已经设置dependent: :destroy了很多工作,这是删除用户的唯一方法,将在 has_many 上进行更改。你们中的一些人不希望它们被隐藏,那么只需从用户模型中删除依赖::destroy 有很多工作

于 2017-04-24T00:24:07.427 回答
0

Paranoia gem 为您的模型设置默认范围,其中不返回带时间戳的 deleted_at 属性集。尝试取消模型的范围,例如

User.unscoped.all

于 2017-04-24T04:10:39.303 回答
0

我知道回答这个问题可能为时已晚,但根据我的经验。添加include Mongoid::Paranoia到 Job 模型将添加deleted_at到关联,而不是真正删除作业记录。另外,如果要查询已删除的作业,请尝试使用Job.unscoped.all,或者如果要从作业实例中获取已删除User的作业,请尝试添加方法

def user
  User.find(user_id)
end

将 替换为user_id映射到用户 ID 的实际键名。

希望能帮助到你!:)

于 2018-08-09T06:39:33.260 回答