لقد قمت باستيراد phpbb3 لموقع. لدى المستخدم المسؤول آلاف المشاركات، وهذا مدرج في صفحة ملخص المستخدم، وفي https://estude.profcaju.com/u/USER/activity ولكن عندما يزور هذا المستخدم /posted يحصل على المواضيع فقط منذ الاستيراد.
عندما أنظر إلى موضوع مستورد تم إنشاؤه بواسطة المستخدم، وأقوم بسحب Topicuser لهذا الموضوع/المستخدم، يتم تعيين posted على false. لقد قمت بتشغيل كل ensure_consistency التي يمكنني العثور عليها (TopicUser، Topic، User).
إذا قمت بتعيين posted على true في TopicUser، فسيظهر في /posted.
هل يجب أن أفعل شيئًا مثل TopicUser.where(user_id: 1).update_all(posted: true)؟ هل يجب أن أفعل ذلك لجميع المستخدمين؟
يبدو أن هناك مشكلة في مهمة ensure_consistency في Rake. لقد تحققت للتو من هجرة أعمل عليها الآن (لم أقم بتشغيل مهمة ensure_consistency بعد) وتم إنشاء سجلات TopicUser بالفعل مع posted: false (الافتراضي). عندما تصل مهمة Rake إلى هذه النقطة فإنها تولد خطأ “مفتاح مكرر” ولا يتم إنشاء السجلات بسبب 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