متابعةً للنقاش من لا يمكن إصلاح أسماء العلامات بنقاط/فواصل:
مرحباً،
هل يمكن لأي شخص تقديم دليل تم اختباره حول كيفية إعادة تسمية العلامات في وحدة تحكم Rails؟ ليس لدي أي خبرة في استخدام وحدة تحكم Rails ولا أريد إفساد قاعدة البيانات…
متابعةً للنقاش من لا يمكن إصلاح أسماء العلامات بنقاط/فواصل:
مرحباً،
هل يمكن لأي شخص تقديم دليل تم اختباره حول كيفية إعادة تسمية العلامات في وحدة تحكم Rails؟ ليس لدي أي خبرة في استخدام وحدة تحكم Rails ولا أريد إفساد قاعدة البيانات…
تسجيل الدخول إلى الخادم الخاص بك عبر SSH
cd /var/discourse
./launcher enter app
rails c
t = Tag.find_by_name('oldname')
t.name = 'newname'
t.save
هل هناك طريقة لتغيير علامة معينة في جميع المواضيع؟ لقد قمت بتغيير اسم النطاق الخاص بي مرة واحدة، وكانت هناك طريقة لإعادة كتابة جميع الإشارات إلى النطاق القديم إلى النطاق الجديد. هل يمكن القيام بذلك أيضًا باستخدام العلامات؟ أريد إعادة تسمية علامة، ولكن دون إرباك المستخدمين بعلامات غير موجودة.
تعديل، لقد قمت بحلها باستخدام مرادفات العلامات
على الرغم من أنها بعيدة عن المثالية، إلا أنها ستستمر في استخدام العلامات القديمة وتظهر في نظرة عامة على العلامات والإكمال التلقائي. أود حقًا استبدالها بالكامل وإلغاء العلامة القديمة.
سؤال صريح - كيف لا يكفي تغيير اسم العلامة لهذا؟
حسنًا، على سبيل المثال، عندما أستخدم العلامة chat هنا، والعديد من العلامات الأخرى في مواضيع مختلفة، ثم تقوم بإعادة تسميتها إلى #chats. عندها ستشير العلامة chat إلى علامة غير موجودة لأنها لم تتم إعادة تسميتها. لذا، فإن إعادة تسمية العلامات تعمل بشكل جيد لعناوين المواضيع، ولكن ليس داخل تعليقات المواضيع عندما يستخدمها الأشخاص بالفعل. أم أنني أفتقد شيئًا ما؟
شكر خاص لـ @RGJ ، لقد نجح الأمر بسهولة
![]()
أعتقد أنه لا توجد طريقة لإعادة تسمية العلامات الموجودة المستخدمة في المواضيع من قبل المستخدمين؟ لذا ليس العلامات في عناوين المواضيع، ولكن حقًا في التعليقات.
استخدمه على مسؤوليتك الخاصة!
قم بذلك بعد إعادة تسمية #foo إلى #bar
Post.where("raw like '%#foo%'").each do |p|
p.raw = p.raw.gsub(/#foo\b/, '#bar')
p.save!
end
يبدو رائعًا! شكرًا على التنبيه. النسخ الاحتياطي سيخفف من المخاطر
.
لأغراض فهمي، \"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"
أريد تشغيل هذا الآن:
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%'\"', قبل أن أبدأ في التخمين، هل يحتاج الرمز # إلى تهريب؟
كان من المفترض أن يأتي بعد هذا، يجب تنفيذ الكود داخل rails c
نعم، لم ألاحظ حتى خطأ bash. يجب أن أحصل على المزيد من النوم… شكرًا!!
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.