设置
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
重现步骤:
- 在配置文件上调用destroy方法。
- degreeholderships 表中的条目标记为 active=NULL 并且已删除_at=timestamp
- 在配置文件上调用恢复方法并通过递归:true
- profile.restore(递归:真)
- degreeholderships 表中的条目保持不变
预期结果:
- 与个人资料相关的学位持有人条目也应恢复。
我尝试使用和不使用 recursive: true 选项运行恢复,并设置 recovery_window 值。所有显示此行为。我还删除了使用活动列的选项并恢复为使用 deleted_at(默认值)。
我想了解这种行为是否是:
- 由于我的设置错误。
- 实际上是预期的行为,如果是这样,请解释为什么这比能够递归地恢复依赖项更可取。
- 是宝石的错误。