我正在进行人力资源规划的RoR申请。 Normaly不允许删除过去的条目。我不时要删除用户,当然我想删除所有条目。
我的用户模型:
has_many :team_memberships, dependent: :destroy
has_many :slots, through: :team_memberships, source: :slot
TeamMembership模型:
before_destroy :check_permission
def check_permission
if self.slot.start_time < Time.now.beginning_of_day
errors.add(:base, "Historische Einträge können nicht gelöscht werden")
return false
end
end
rake任务只会破坏旧用户,但是当他们有历史记录时,这不起作用。
如果rake任务调用User.destroy,我如何跳过before_destroy验证?
有什么想法吗?
答案 0 :(得分:2)
您可以为模型添加一个新方法来设置变量并将其用作回调的返回值:
before_destroy :check_permission
def allow_deletion!
@allow_deletion = true
end
def check_permission
if !@allow_deletion && self.slot.start_time < Time.now.beginning_of_day
errors.add(:base, "Historische Einträge können nicht gelöscht werden")
return false
end
end
这允许你写这样的东西:
user.allow_deletion!
user.destroy
此方法优于delete
,您只能跳过此特定回调,而不是所有回调和相关的销毁操作。
答案 1 :(得分:0)
您可以拨打Enumerable<int>
来跳过回调。