1

通常,使用acts_as_paranoid 时,当您使用诸如findor之类的查找器时where,它会排除具有deleted_at(或您为删除列命名的任何内容)值而不是null 的条目。但是,我创建了一个用户权限,允许用户查看和操作数据库中甚至“已删除”(参见:隐藏)的实体。事情是,就目前而言,每次我想运行时,我都需要检查权限find,或者where,或者你有什么,如果你有这个权限使用with_deleted,而不是有一个地方检查是否act_as_paranoid 逻辑甚至应该从一开始就起作用,并且总是with_deleted在该逻辑不应该的时候添加。

有没有什么办法可以做到这一点,或者类似的事情,让它变得干燥?

4

1 回答 1

2

您可以使用cancan。这允许您定义能力。然后您可以定义:

if user.admin?
  can :manage, User.with_deleted
else
  can :manage, User
end

然后你可以在控制器中选择,使用:

User.accessible_by(current_ability)
于 2013-11-21T10:41:58.490 回答