J’ai effectué une importation phpbb3 pour un site. L’utilisateur administrateur a des milliers de messages, et cela est indiqué sur la page de résumé de l’utilisateur, et dans https://estude.profcaju.com/u/USER/activity mais lorsque cet utilisateur visite /posted, il n’obtient que les sujets depuis l’importation.
Quand je regarde un sujet importé qui a été créé par l’utilisateur, et que je récupère Topicuser pour ce sujet/utilisateur, posted est défini sur false. J’ai exécuté toutes les fonctions ensure_consistency que j’ai pu trouver (TopicUser, Topic, User).
Si je définis posted sur true dans un TopicUser, il apparaîtra dans /posted.
Devrais-je faire quelque chose comme TopicUser.where(user_id: 1).update_all(posted: true) ? Devrais-je faire cela pour tous les utilisateurs ?
Cela ressemble à un problème avec la tâche Rake ensure_consistency. Je viens de vérifier une migration sur laquelle je travaille actuellement (je n’ai pas encore exécuté la tâche ensure_consistency) et les enregistrements TopicUser ont déjà été créés avec posted: false (la valeur par défaut). Lorsque la tâche Rake atteint ce point, elle génère une erreur de « clé en double » et les enregistrements ne sont pas créés en raison de ON CONFLICT DO NOTHING.
def insert_topic_users
log "Inserting topic users..."
DB.exec <<-'SQL'
INSERT INTO topic_users (user_id, topic_id, posted, last_read_post_number, first_visited_at, last_visited_at, total_msecs_viewed)
SELECT user_id, topic_id, 't' , MAX(post_number), MIN(created_at), MAX(created_at), COUNT(id) * #{MS_SPEND_CREATING_POST}
FROM posts
WHERE user_id > 0
GROUP BY user_id, topic_id
ON CONFLICT DO NOTHING
SQL
end