Сделать так, чтобы 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)
Другие вопросы по тегам