Сделать так, чтобы act_as_paranoid искатели исключали "удаленные" объекты условно
Обычно, с ActS_AS_paranoid, когда вы используете видоискатель, такой как find
или же where
, это исключает записи, которые имеют deleted_at
(или как вы назвали свой столбец удаления) значение, отличное от нуля. Тем не менее, я создал пользовательское разрешение, которое позволяет пользователям просматривать и манипулировать даже "удаленными" (см.: скрытыми) объектами в базе данных. Дело в том, как оно есть, мне нужно будет проверять разрешение каждый раз, когда я хочу запустить find
, или же where
или что у вас есть, и если у вас есть такое разрешение, используйте with_deleted
в отличие от наличия одного места, которое проверяет, должна ли логика act_as_paranoid вообще работать с самого начала, и всегда добавляя with_deleted
когда эта логика не должна.
Есть ли способ сделать это, или что-то подобное, чтобы сделать все сухим?
1 ответ
Вы можете использовать канкан. Это позволяет вам определять способности. Затем вы можете определить:
if user.admin?
can :manage, User.with_deleted
else
can :manage, User
end
Затем вы можете выбрать в контроллере, используя:
User.accessible_by(current_ability)