هل هناك طريقة لتحديث معلومات المستخدم بشكل جماعي؟ ما أريد فعله هو تصدير معلومات تحديث بيانات المستخدم مثل الاسم وما إلى ذلك ثم استيرادها مرة أخرى إلى قاعدة البيانات، وتحديث المعلومات الموجودة.
يمكنني تنزيل ملف CSV من لوحة الإدارة ولكني أتساءل كيف يمكنني إعادة تلك المعلومات إلى Discourse.
كنت أقوم بتحديث كل مستخدم يدويًا على جانب الإدارة (حقل الاسم) ولكن عندما أعود، تظهر التحديثات فارغة.
أفضل طريقة هي على الأرجح باستخدام واجهة برمجة التطبيقات (API)، على الرغم من أنه يمكنك أيضًا القيام بذلك باستخدام نص برمجي يقرأ ملف CSV الخاص بك ويقوم بتحديثه في Rails.
إليك مهمة Rake تقوم بتحديث حقول المستخدم المخصصة التي يمكن تعديلها لتحديث أشياء أخرى:
require "csv"
desc "Import user fields"
task "user_fields:import_csv", [:filename] => [:environment] do |_task, args|
puts "Filename: #{args[:filename]}"
data = CSV.read(args[:filename], headers: true)
data.each_entry do |row|
puts "doing row."
row.to_h.each do |x|
user_id = row["user_id"]
if x.first == "user_id"
u = User.find(user_id)
puts "Got user: #{u.username}"
else
name = x.first
val = row[x.first]
ucf = UserCustomField.find_by(user_id: row["user_id"], name: name)
if ucf
if val != ucf.value
puts "Updating UCF: #{row["user_id"]} Name: #{name}, Found #{ucf.value}}"
ucf.update(value: val)
end
else
if val
puts "Creating UCF: #{row["user_id"]} Name: #{name}, value: #{val}"
UserCustomField.create(user_id: user_id, name: name, value: val)
end
end
end
end
end
end
بعد تعديله، ستضعه في /var/www/discourse/lib/tasks داخل الحاوية و rake user_fields:import_csv["YOUR-CSV.csv"]
إذا كنت بحاجة إلى مساعدة في تعديله ليناسب احتياجاتك، أرسل لي ملف CSV الخاص بك (أو على الأقل الرؤوس والصفوف القليلة الأولى) عبر البريد الإلكتروني وسأقدم لك تقديرًا.
هل يعمل مع الأعمدة التي تحتوي على مسافات بها أم يجب أن تحتوي الحقول على شرطات سفلية؟ أيضًا عند التصدير، يكون رأس العمود الأول هو id وليس user_id. هل هذه مشكلة؟
لم يتم تصميم البرنامج النصي لاستهلاك تنزيل بيانات المستخدم. ستحتاج إلى تعديل العديد من رؤوس الأعمدة. أيضًا، في شكله الحالي، يقوم البرنامج النصي بتحديث العناصر المخزنة في جدول custom_fields فقط.