معالجة حقول المستخدم المخصصة من كونسول Rails

لقد استخدمت مقتطف الكود هذا لمحاولة استبدال بعض البيانات بشكل جماعي في حقل مخصص للمستخدم. استمددته من مستورد Ning.

users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
  u.custom_fields = {"user_field_16" => "Nil"}
  u.save
end

ومع ذلك، كان له عواقب غير مقصودة وهي مسح القيم الأخرى للحقول المخصصة للمستخدمين.

هل يمكن لأي شخص اقتراح طريقة لتعديل قيمة حقل مخصص للمستخدم من وحدة التحكم لا تسبب الفوضى؟

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

أعتقد أن هذا التنسيق يغير فقط الحقل المخصص المعني. لقد اختبرته لفترة وجيزة، وبدا أنه يؤدي الغرض. :+1:

users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
  u.custom_fields["user_field_16"] = "Nil"
  u.save
end

على الرغم من أنه إذا كنت تريد أن يكون الحقل NULL بدلاً من “Nil”، يمكنك تجربة هذا بدلاً من ذلك:

users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
  u.custom_fields["user_field_16"] = NIL
  u.save
end
4 إعجابات

وأيضًا شيء مثل

UserCustomField.create(user_id: 1, name: "user_field_4",value: "Oops")

أوه، ولكن إذا كانت هذه القيمة موجودة بالفعل، فسيضيف قيمة أخرى! لذلك قد تحتاج إلى

ucf=UserCustomField.find_by(user_id: name: 'user_field_4')

وبعد ذلك ستحتاج إما إلى تحديثها أو إنشاء واحدة جديدة.

ولكن إذا قمت بإنشاء عدة عناصر، فسيعرضها واجهة المستخدم مفصولة بفواصل، وإذا تم تعديلها عبر واجهة المستخدم عند حفظها، فسيتم حفظها مرة أخرى كقيمة واحدة.

يمكنك إلقاء نظرة عليها باستخدام

UserCustomField.all

أو

UserCustomField.where(name: x)

هذا من الذاكرة على هاتفي، لذا قد تختلف تجربتك.

بفعل هذا، فإنك تستبدل كل شيء في u.custom_fields بالهاش {"user_field_16" => nil} (لاحظ الـ nil بدون علامات اقتباس)

شكرًا لك - نعم، هذا ما كان يجب أن أستخدمه.

نعم، هذا بالضبط ما حدث. شعرت بالغباء الشديد بعد ذلك!

إعجابَين (2)

أجد هذه أداة مفيدة للحصول على بناء جملة rails الصحيح عند الرغبة في معالجة UCFs هذه في وحدة تحكم rails:

إذا كنت تستبدل بيانات في هذا الحقل
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(سيؤدي ذلك إلى ظهور خطأ إذا لم تكن هناك بيانات في هذا الحقل بعد)

إذا كنت تملأ هذا الحقل لأول مرة
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=",value: "=NewValue=")
7 إعجابات

كيف قمت بإنشاء هذا المحتوى الديناميكي في المنشور؟

يبدو أن ميتا لديها هذه المكونة قيد التشغيل. (مجرد تخمين

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.