كيف تتحلل "Method = Data Data" من Rails 3 بأمان؟
سؤال
يقوم Rails 3 ببعض الأشياء الرائعة لجعل JavaScript غير مزعجة ، لذلك فعلوا أشياء مثل هذا:
= link_to "Logout", user_session_path, :method => :delete
..
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
لكن هذا حدث لي .. عندما أطفئ JavaScript ، لم تعد الطريقة حذفها ، فهي تحصل كما هو متوقع. لذلك هل هناك خطط ، أم أن هناك طريقة للسماح لها بذلك data-
سمات للتدهور بأمان ، بحيث لا يزال هذا الرابط هو طلب حذف؟
المحلول
التغيير الذي قاموا به في القضبان 3 مع هؤلاء data-
لم تكن السمات حول تدهور رشيق ، فقد كان الأمر يتعلق بـ JavaScript غير مزعجة.
في القضبان 2 ، تحديد :method => :delete
على الارتباط ، سيولد مجموعة كاملة من JavaScript المضمّن من شأنها أن تنشئ نموذجًا مع إدخال مخفي ثم إرسال النموذج. كان هذا هو نفسه كما هو الآن: قم بإيقاف تشغيل JavaScript ويتخلف عن طلب الحصول على طلب. على هذا النحو ، فإن دعم حالة عدم وجود JavaScript هو نفسه كما كان من قبل.
يتمثل أحد الخيارات في استخدام نموذج/زر بدلاً من الرابط حتى تتمكن من تضمين الطريقة كحقل مخفي ، مثل Rails 2 JavaScript. هناك خيار آخر هو أن يأخذك إصدار GET إلى صفحة وسيطة تحتوي بدورها على النموذج/الزر.
فائدة النهج الجديد هو أنه غير مزعج. يوجد JavaScript لتغيير الفعل HTTP في ملف خارجي ويستخدم ملف data-
سمات لتحديد العناصر التي يجب إرفاقها.
نصائح أخرى
بدلا من استخدام link_to
الطريقة - والتي تتطلب منك استخدام JavaScript للتأكد من أن طريقة HTTP DELETE
-- استخدم ال button_to
الطريقة ، التي ستنشئ نموذجًا مع عنصر إدخال مخفي يخبر القضبان بمعالجة طريقة HTTP كـ DELETE
عوضا عن POST
. إذا لزم الأمر ، يمكنك بعد ذلك استخدام CSS لتصميم الزر في النموذج بحيث يبدو وكأنه رابط.
الفرصة الوحيدة لديك هي تحديد النموذج. لا يمكن أن يكون الرابط منشورًا مع _method = "حذف" بدون javaScript أو عن طريق النموذج.
لا يمكن بدون جافا سكريبت.
أقوم بعمل مكون إضافي jQuery صغير للتحويل data-method
سمة الارتباط إلى النماذج المخفية الزائفة (المستخدمة في مشروع Laravel على سبيل المثال).
إذا كنت تريد استخدامه: https://github.com/ifnot/restfulizerjs