إعادة تسمية العلامات في وحدة تحكم rails

متابعةً للنقاش من لا يمكن إصلاح أسماء العلامات بنقاط/فواصل:

مرحباً،

هل يمكن لأي شخص تقديم دليل تم اختباره حول كيفية إعادة تسمية العلامات في وحدة تحكم Rails؟ ليس لدي أي خبرة في استخدام وحدة تحكم Rails ولا أريد إفساد قاعدة البيانات…

إعجابَين (2)

تسجيل الدخول إلى الخادم الخاص بك عبر SSH

cd /var/discourse
./launcher enter app
rails c

t = Tag.find_by_name('oldname')
t.name = 'newname'
t.save
9 إعجابات

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

تعديل، لقد قمت بحلها باستخدام مرادفات العلامات :tada: على الرغم من أنها بعيدة عن المثالية، إلا أنها ستستمر في استخدام العلامات القديمة وتظهر في نظرة عامة على العلامات والإكمال التلقائي. أود حقًا استبدالها بالكامل وإلغاء العلامة القديمة.

إعجابَين (2)

سؤال صريح - كيف لا يكفي تغيير اسم العلامة لهذا؟

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

حسنًا، على سبيل المثال، عندما أستخدم العلامة chat هنا، والعديد من العلامات الأخرى في مواضيع مختلفة، ثم تقوم بإعادة تسميتها إلى #chats. عندها ستشير العلامة chat إلى علامة غير موجودة لأنها لم تتم إعادة تسميتها. لذا، فإن إعادة تسمية العلامات تعمل بشكل جيد لعناوين المواضيع، ولكن ليس داخل تعليقات المواضيع عندما يستخدمها الأشخاص بالفعل. أم أنني أفتقد شيئًا ما؟

شكر خاص لـ @RGJ ، لقد نجح الأمر بسهولة :pray: :pray: :pray:

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

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

استخدمه على مسؤوليتك الخاصة!

قم بذلك بعد إعادة تسمية #foo إلى #bar

Post.where("raw like '%#foo%'").each do |p|
  p.raw = p.raw.gsub(/#foo\b/, '#bar')
  p.save!
end
إعجاب واحد (1)

يبدو رائعًا! شكرًا على التنبيه. النسخ الاحتياطي سيخفف من المخاطر :nerd_face:.

لأغراض فهمي، \"raw like '%#foo%'\"، هل هذا تطابق صارم؟ بمعنى، ماذا لو كان لديك الوسم #access الذي يحتاج إلى إعادة تسميته إلى #access_granted، فهل \"raw like '%#access%'\" سيطابق كل من #access و #access_granted؟ لأنه في هذه الحالة، يمكن ربما إعادة تسمية التعليقات الموجودة التي تستخدم بالفعل #access_granted إلى #accessaccess_granted.

للمقارنة مع أمر grep، فإن الخيار --word-regexp يساعد ويضمن مطابقة الكلمات الكاملة فقط.

من صفحة الدليل:

حدد فقط الأسطر التي تحتوي على مطابقات تشكل كلمات كاملة. الاختبار هو أن السلسلة المطابقة يجب أن تكون إما في بداية السطر، أو مسبوقة بحرف غير مكون للكلمة. وبالمثل، يجب أن تكون إما في نهاية السطر أو متبوعة بحرف غير مكون للكلمة. أحرف تكوين الكلمات هي الأحرف والأرقام والشرطة السفلية.

هل يعمل هذا الأمر بشكل مشابه؟ بالطبع يمكنني اكتشاف ذلك عن طريق إجراء النسخ الاحتياطي وتشغيل الأمر. ولكن فقط لفهم المخاطر، إذا كنت تعرف هذا بالطبع. وإلا، YOLO.

"raw like '%#foo%'" ليس مطابقًا تمامًا، ولكنه لا يحتاج إلى أن يكون كذلك. نظرًا لأن استعلام LIKE % مكلف للغاية من حيث الأداء، فقد اخترت عدم جعله أسوأ من خلال طلب حرف غير حرفي بعده. استعلام where موجود فقط للاختيار المسبق - يمكنك فعليًا إجراء Post.all.each وسيعمل أيضًا (وإن كان أبطأ بكثير).

الاستبدال الفعلي يتم بواسطة gsub و \b يضمن وجود حدود كلمة بعد
العلامة، أي أن العلامة تنتهي هناك.

لذلك، ستتطابق أي مشاركات تحتوي على #access_granted، وسيتم تنفيذ التعليمات البرمجية الداخلية، ولكن gsub لن يفعل شيئًا في هذه الحالة.

irb(main):010:0
=> "Tag #access is here".gsub(/#access\b/, "#access_granted")
=> "Tag #access_granted is here"
irb(main):011:0
=> "Tag #access_granted is here".gsub(/#access\b/, "#access_granted")
=> "Tag #access_granted is here"
إعجاب واحد (1)

أريد تشغيل هذا الآن:

Post.where("raw like '%#access%'").each do |p|
  p.raw = p.raw.gsub(/#access\b/, '#strategic_access')
  p.save!
end

Post.where("raw like '%#feedback%'").each do |p|
  p.raw = p.raw.gsub(/#feedback\b/, '#digital_feedback')
  p.save!
end

لكنني أحصل على خطأ bash: syntax error near unexpected token "raw like ‘%#access%’"'وbash: syntax error near unexpected token \"raw like '%#feedback%'\"', قبل أن أبدأ في التخمين، هل يحتاج الرمز # إلى تهريب؟

:point_up: كان من المفترض أن يأتي بعد هذا، يجب تنفيذ الكود داخل rails c

إعجابَين (2)

نعم، لم ألاحظ حتى خطأ bash. يجب أن أحصل على المزيد من النوم… شكرًا!!

3 إعجابات

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