Massenkonvertierung von Themen von einer Kategorie in Gruppen-PMs

Ich plane, eine Reihe von Themen in Gruppen-PMs umzuwandeln, um einige kaum genutzte Kategorien abzuschaffen. Dies können wir nicht über die Benutzeroberfläche tun (nur einzeln), noch kann ich eine Massenmethode dafür finden.

Soweit ich das beurteilen kann, sollte dies über die Konsole funktionieren:

  1. Identifizieren Sie die Themen anhand ihrer Kategorie.
  2. Ändern Sie topic.archetype zu private_message.
  3. Ändern Sie topic.subtype zu ‘user_to_user’.
  4. Setzen Sie topic.category auf Null.
  5. Fügen Sie in topic_groups (oder vielleicht topic_allowed_groups) eine Zeile mit der relevanten group_id und topic_id hinzu.

Macht dieser Ansatz Sinn? Ich muss natürlich zuerst den Unterschied zwischen diesen Themen-/Gruppentabellen herausfinden. Und das Ganze zuerst in einer Sandbox ausprobieren!!

1 „Gefällt mir“

Das könnte funktionieren. Außerdem, wenn Sie es nicht wissen, können Sie so etwas tun

 Themen = Thema.where(Kategorie: 10)

  Themen.update_all(Archetyp: xxx, Themenkategorie: nil)

Oder so etwas. Wenn Sie von update_all wussten, ist das keine Neuigkeit.

2 „Gefällt mir“

Danke, Jay! Das wäre für die erste Hälfte schön und schnell. Ich muss jedoch auch sicherstellen, dass sie am Ende als Gruppen-PMs fungieren.

Haben Sie eine Idee, was ich mit den Tabellen topic_groups / topic_allowed_groups machen muss? Ich glaube nicht, dass ich mit einem update_all davonkomme.

1 „Gefällt mir“

Ich habe inzwischen (es hat eine Weile gedauert!) zwei Wege gefunden, dies zu erreichen. Sie können dies über die Benutzeroberfläche tun, was für kleine Kategorien (und kleine Gruppen) gut funktioniert. Es erfordert etwas Sorgfalt, um zu vermeiden, dass dabei unnötige Benachrichtigungen ausgelöst werden, aber es ist durchaus machbar.

Alternativ können Sie die Rails-Konsole verwenden (vorausgesetzt, Sie hosten selbst), was schneller und viel leistungsfähiger ist.

Über die Benutzeroberfläche (UI)

  1. Entfernen Sie die anderen Gruppenmitglieder aus der Gruppe (aber behalten Sie eine Liste der Benutzernamen/E-Mails, damit Sie sie einfach wieder hinzufügen können). Dadurch wird verhindert, dass diese benachrichtigt werden.
  2. Gehen Sie jeden Beitrag in der Kategorie durch und wandeln Sie jeden mithilfe des Admin-Spanner-Menüs in eine PM (Private Nachricht) um
    • Ich finde es am einfachsten, jeden Beitrag in einem eigenen Tab zu öffnen und dann nacheinander durchzugehen
  3. Fügen Sie die Gruppe zu jedem der Beiträge (jetzt PMs) hinzu
  4. Fügen Sie die Gruppenmitglieder wieder zur Gruppe hinzu
  5. Räumen Sie auf / Löschen Sie alle „kleinen Beiträge“ in jeder Gruppennachricht nach Wunsch

In der Rails-Konsole

Greifen Sie auf die Konsole zu, indem Sie in den Container wechseln und dann die Konsole aufrufen:

./launcher enter app
  rails c

Legen Sie die Kategorie und die Gruppe fest und kopieren Sie dann das folgende Skript in die Konsole:

category_id = =CategoryID= 
group_name = '=GroupName='

group = Group.find_by('lower(name) = ?', group_name.downcase)
about_id = Category.find(category_id).topic_id

topic_ids = Topic.where(category_id: category_id).where.not(id: about_id).pluck(:id)

Topic.where(id: topic_ids).find_each do |topic|
  topic.archetype = Archetype.private_message
  topic.category_id = nil
  topic.subtype = 'user_to_user'
  topic.save!

  TopicAllowedGroup.find_or_create_by!(topic_id: topic.id, group_id: group.id)

  Post.where(topic_id: topic.id).pluck(:user_id).uniq.each do |uid|
    TopicAllowedUser.find_or_create_by!(topic_id: topic.id, user_id: uid)
  end
end

Dies benachrichtigt die Benutzer überhaupt nicht und bewahrt die an den Beiträgen beteiligten Benutzer gut (falls sie nicht in der Gruppe sind)

1 „Gefällt mir“