Массовое восстановление

Продолжение обсуждения из Лучший способ временно убрать публичный доступ к темам пользователя?:

Было бы возможно добавить возможность массового восстановления удалённых постов через селектор в списке /u/username/deleted-posts? Судя по всему, это потребовало бы технически очень сложного и потенциально опасного SQL/Rails-скрипта для их программатического восстановления.

Чтобы эта функция была максимально полезной, было бы хорошо разделять удалённые темы и удалённые ответы. Возможно, можно сохранить существующий URL /u/username/deleted-posts, а затем добавить к нему /u/username/deleted-posts/topics и /u/username/deleted-posts/replies.

2 лайка

Темы уже удалены, и у меня нет оценки того, когда пользователь может запросить восстановление тем, поэтому, полагаю, я могу подождать реализации массовой функции восстановления. Мне кажется, я не единственный, кому это было бы полезно: здесь есть довольно много постов с просьбами о помощи в этом вопросе.

Это также выглядит как потенциально более простой и безопасный способ программно восстановить темы, при условии, что я смогу разобраться, как сгенерировать список ID удалённых тем пользователя:

Это позволит найти удаленные темы, созданные пользователем с user_id 1.

dts = Topic.with_deleted.where(user_id: 1).where("deleted_at is not null")
dts.pluck(:deleted_at, :id)
dps = Post.with_deleted.where(user_id: 1).where("deleted_at is not null")
dps.pluck(:deleted_at, :id)

Кажется, что вы можете восстановить посты с помощью чего-то вроде:

dp = dps.first
dp.deleted_at = nil
dp.deleted_by = nil
dp.save

Для тем нужно сделать что-то подобное.

Если когда-нибудь понадобится восстановить всё это, приведённого выше кода будет достаточно для того, чтобы кто-то, кто немного знаком с Rails, мог восстановить все записи.

Кстати, если бы вы переместили их в скрытую категорию, возможно, было бы несколько проще массово откатить их к последней версии. Но когда ни то, ни другое для вас вообще невозможно, я думаю, что это различие без реального значения.

Наконец, извиняюсь ещё раз за то, что снова обращаюсь к запросу на функцию как к Support. Я думаю, что делаю это потому, что у меня нет полномочий добавлять новые функции, но я могу решать проблемы.

4 лайка

Совсем не проблема, Джей, большое спасибо. Конечно, я бы предпочел, если бы в Discourse была реализована возможность через графический интерфейс, но если нет, я очень ценю, что вы помогли мне разобраться в этом.

1 лайк

Это, безусловно, частный случай, но мы стараемся отслеживать, когда функция запрашивается несколько раз (особенно клиентами), чтобы лучше понимать, когда стоит двигаться дальше :slight_smile:

1 лайк