使acts_as_paranoid finders排除"删除"有条件的对象

时间:2013-08-08 18:25:42

标签: ruby-on-rails ruby permissions acts-as-paranoid

通常情况下,使用acts_as_paranoid,当您使用findwhere等查找程序时,它会排除具有deleted_at(或您命名为删除列的任何内容)值的条目,而不是空值。但是,我创建了一个用户权限,允许用户查看和操作数据库中的“已删除”(请参阅​​:隐藏)实体。事实上,每当我想要运行findwhere或者你拥有什么时,我都需要检查权限,如果你有这个权限,请使用{{ 1}}而不是让一个地方检查act_as_paranoid逻辑是否应该开始工作,并且当该逻辑不应该时,总是添加with_deleted

有没有办法实现这个,或类似的东西,使它全部干?

1 个答案:

答案 0 :(得分:2)

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

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

然后您可以使用:

在控制器中进行选择
User.accessible_by(current_ability)