كيف يمكنك مسح إدخال واحد من جلسة روبي أون ريلز؟
-
22-08-2019 - |
سؤال
في روبي على القضبان عند القيام به session[:foo] = nil
فإنه يترك إدخال اسمه :foo
في كائن الجلسة.كيف يمكنك التخلص من هذا الإدخال الفردي من كائن الجلسة؟
المحلول
في الواقع هناك طريقة لحذف قيمة من الجلسة.كما قال RichH، فإن متغير الجلسة هو مثيل CGI::Session.عند إدخال شيء من هذا القبيل session[:foo]
إنه في الواقع يبحث عن هذا الرمز في ملف @data
متغير المثيل في كائن الجلسة.متغير البيانات هذا هو التجزئة.
يحرر: يوجد متغير مثيل بيانات في فئة CGI::Session.إذا ذهبت إلى مستندات وإلقاء نظرة على الكود المصدري لـ []=
الطريقة سترى أن هناك @data
عضو.
حتى يتم الحذف session[:foo]
كل ما عليك فعله هو الوصول إلى ذلك @data
متغير من داخل الجلسة
session.data[:foo]
الآن لحذفه:
session.data.delete :foo
بمجرد القيام بذلك، لن يكون هناك المزيد من foo في متغير الجلسة.
نصائح أخرى
يبدو مثل أبسط نسخة تعمل.تستخدم جميع المتاجر (ملفات تعريف الارتباط، الملفات، ActiveRecord، ...). AbstractStore::SessionHash
باعتبارها الكائن الذي يحتوي على البيانات، توفر المخازن المختلفة فقط وسيلة لتحميل البيانات وحفظها AbstractStore::SessionHash
الحالات.
AbstractStore::SessionHash
يرث من Hash
, ، لذلك هذا يؤجل إلى Hash#delete
طريقة:
session.delete(:key_to_delete)
وبما أن الدورة هو روبي CGI :: الدورة أ > وليس تجزئة، داعيا حذف سيتم حذف الواقع الدورة. حذف يأخذ أية معلمات - وهذا هو بلدي انك تحصل على "عدد غير صحيح من الوسيطات (1 أو 0)" رسالة عند محاولة ما يشير hyuan
والطريقة المتعارف عليها لمسح إدخال الدورة هي مع جلسة [فو] = لا شيء كما اشرتم. فهي بعيدة عن المثالية، ولكن عبارات مثل الدورة]: فو] .nil؟ سوف تتصرف كما هو متوقع.
وأنا حقا أتمنى أن يكون تصرف مثل التجزئة العادية ... ولكن لم يحدث ذلك.