تغيير لغة الواجهة للعديد من المستخدمين عبر استعلام قاعدة بيانات؟

أتساءل عما إذا كان بإمكان شخص ما مساعدتي في طلب دعم من فضلكم.

أحتاج إلى تحديث تفضيلات جميع مستخدمينا الذين لديهم حاليًا لغة واجهة هي English (US) وتغييرها لاستخدام English (UK) بدلاً من ذلك.

هل هناك استعلام مستكشف البيانات (Data Explorer query) يمكنني صياغته لإصدار نوع من استعلام SQL UPDATE مع عبارة where عليه لالتقاط تلك التي هي English (US) فقط؟

للمرجع / الإيضاح… لقد قضينا مؤخرًا وقتًا طويلاً في تحديث جميع Site texts (نصوص الموقع) لدينا على لغة English (UK) ووجدنا أثناء الاختبار أن أي شخص اشترك في منصتنا منذ أكثر من عام كان يتم تعيينه افتراضيًا على إعداد الموقع الافتراضي القديم وهو English (US)، بدلاً من English (UK)، ويحتاج حوالي 15 ألف مستخدم إلى التحديث.

إعجاب واحد (1)

لا يمكنك تشغيل استعلامات UPDATE عبر المكون الإضافي Data Explorer لأنه للقراءة فقط بشكل صارم.

لتحديثات الكميات الكبيرة مثل هذه، استخدم وحدة تحكم Rails بدلاً من ذلك:

User.where(locale: 'en').update_all(locale: 'en_GB')

لمزيد من الأمثلة حول تحديث تفضيلات المستخدم بكميات كبيرة، راجع:

إعجاب واحد (1)

إذا قمت بتشغيل هذا في مستكشف البيانات (Data Explorer):

SELECT
  u.locale,
  COUNT(*) AS user_count
FROM users u
WHERE u.active = TRUE
  AND u.locale IN ('en', 'en_GB')
GROUP BY u.locale
ORDER BY user_count DESC, u.locale

أحصل على:

locale user_count
en_GB 19479
en 16014

أحتاج إلى تحديث (UPDATE) الـ 16,014 مستخدمًا ذوي اللغة en ليصبحوا en_GB.

ولست شجاعًا بما يكفي لتشغيل استعلام تحديث على الإنتاج :blush:

يا للراحة :sweat_smile:

رائع، شكرًا لك! :person_bowing:

شكرًا @jahan_gagan

لقد أخذت نسخة احتياطية من قاعدة البيانات أولاً :sweat_smile:

ثم قمت بتشغيل هذا:

لقد نجح الأمر تمامًا:

Loading production environment (Rails 8.0.4)
discourse(prod)=> User.where(locale: 'en').update_all(locale: 'en_GB')
=> 16016

ويستجيب استعلام مستكشف البيانات الخاص بي الآن بما يلي:

locale user_count
en_GB 35493

شكرًا لك :clap:

إعجاب واحد (1)