Я думаю, что хорошим DRY-подходом было бы создание в вашей модели метода, который проверяет, разрешено ли удаление. Затем используйте этот метод из вашего контроллера или из способность. ИМХО Я думаю, что сложная логика разрешений / бизнес-логики, отделенная от CanCan, лучше, когда есть вероятность, что вы в будущем можете перейти на другую систему разрешений.
В вашей модели:
def can_destroy_list(list)
... Do check here ....
end
В способности.рб
can :destroy, List do |list|
user.can_destroy_list(list)
end
Ваш контроллер и представления могут также использовать can_destroy_list
непосредственно в экземпляре модели, если это необходимо или использовать: если can? :destroy, @list