0

设置

class Profile < ApplicationRecord
  acts_as_paranoid

  has_many :degreeholderships
  has_many :degrees, through: :degreeholderships, dependent: :destroy
end

class Degreeholdership < ApplicationRecord
  acts_as_paranoid column: :active, sentinel_value: true

  belongs_to :profile
  belongs_to :degree

  validates :profile_id, presence: true
  validates :degree_id, presence: true

  def paranoia_restore_attributes
    {
      deleted_at: nil,
      active: true
    }
  end

  def paranoia_destroy_attributes
    {
      deleted_at: current_time_from_proper_timezone,
      active: nil
    }
  end
end

class Degree < ApplicationRecord
  has_many :degreeholderships
  has_many :profiles, through: :degreeholderships, dependent: :destroy
end

重现步骤:

  1. 在配置文件上调用destroy方法。
  2. degreeholderships 表中的条目标记为 active=NULL 并且已删除_at=timestamp
  3. 在配置文件上调用恢复方法并通过递归:true
    • profile.restore(递归:真)
  4. degreeholderships 表中的条目保持不变

预期结果:

  • 与个人资料相关的学位持有人条目也应恢复。

我尝试使用和不使用 recursive: true 选项运行恢复,并设置 recovery_window 值。所有显示此行为。我还删除了使用活动列的选项并恢复为使用 deleted_at(默认值)。

我想了解这种行为是否是:

  1. 由于我的设置错误。
  2. 实际上是预期的行为,如果是这样,请解释为什么这比能够递归地恢复依赖项更可取。
  3. 是宝石的错误。
4

1 回答 1

0

参数:{"type"=>"restore", "id"=>"18"}

Pt Load (0.6ms) SELECT "pts".* FROM "pts" WHERE "pts"."deleted_at" IS NULL AND "pts"."id" = $1 LIMIT $2 [["id", 18], ["LIMIT ", 1]]

覆盖默认查询适用于除destroy、really destroy 和restore 之外的所有方法

9ms 内完成 401 Unauthorized (ActiveRecord: 1.3ms)

ActiveRecord::RecordNotFound(找不到 'id'=18 的产品 [WHERE "pts"."deleted_at" IS NULL]):

这是一个没有关联的简单 1 表?

于 2018-03-05T20:47:20.137 回答