سؤال

باستخدام القضبان v2.1, دعونا نقول لديك عمل وحدة تحكم التي يمكن الوصول إليها من أكثر من موقع واحد.على سبيل المثال, داخل القضبان التطبيق, لديك رابط تحرير المستخدم من اثنين من وجهات نظر مختلفة ، واحدة على المستخدمين مؤشر عرض آخر من وجهة نظر أخرى (دعونا نقول من شريط التنقل على كل صفحة).

أنا أتساءل ما هي أفضل طريقة لإعادة توجيه المستخدم إلى المكان الصحيح اعتمادا على ما قاموا بالنقر على الرابط.على سبيل المثال:

مثال 1:

  1. قائمة بجميع المستخدمين
  2. انقر فوق "تحرير" على المستخدم في قائمة
  3. المستخدم بالنقر فوق "حفظ" على شكل وحدة تحكم الموجهات إلى 1.

مثال 2:

  1. المستخدم يمكن أن يكون على أي صفحة في التطبيق ، شريط التنقل يدل على ارتباط تحرير المستخدم الحالي
  2. ينقر المستخدم على الرابط تحرير
  3. يقوم المستخدم بالنقر على "حفظ" على شكل وحدة تحكم الموجهات إلى أي صفحة كانت على عندما يقوم المستخدم بالنقر على الرابط "تعديل" في شريط التنقل.

رأيت ذلك في الماضي:

  1. وضع المعلمة على الأصل تحرير الرابط الأصلي تحكم/في الرابط ظهرت.لجعل هذا أكثر الجافة, هل يمكن استخدام @تحكم.controller_name و @تحكم.action_name في مساعد.
  2. تحكم يحفظ المعلمات إلى جلسة متغير.
  3. مرة وحدة تحكم قد حفظ السجل إعادة توجيه إلى جلسة متغير.

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

أفضل طريقة تفكيري هو:

  1. مكان before_filter على "تحرير" العمل لإنقاذ المرجع (غير موثوق بها هذا يكفي؟) في الدورة.
  2. عندما "تحديث" هو ضرب وحدة تحكم سيتم إعادة توجيه إلى جلسة المتغير ثم حذف متغير جلسة.

أية أفكار حول أفضل طريقة للقيام بذلك ؟

هل كانت مفيدة؟

المحلول

أعتقد أن استخدام before_filter على تحرير العمل هو أقل فظاظة.

المحيل ينبغي أن تكون موثوقة بما فيه الكفاية ...ببساطة الافتراضي في حالة لا التحويلية المتاحة (أقول:شخص مرجعية تحرير الصفحة) و يجب أن يكون على ما يرام.

نصائح أخرى

فلاش:البيانات التي سوف تستخدم فقط من أجل الطلب التالي يمكن تخزينها في الفلاش.ثم لم يكن لديك للذهاب نحو تلقائيا مسح عليه.أنه يعمل بشكل جيد لمدة محدودة بت من سياق التطبيق الذي كنت على يقين من أن تحتاج فقط مرة واحدة-ليس فقط من أجل رسائل الخطأ!

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

#in edit controller
...
flash[:page_to_redirect_to] = request.referer || "/my/default/path"
...

#in save controller
redirect_to flash[:page_to_redirect_to] || "/my/default/path"

أنا لا أقترح hardcoding تلك بالمناسبة.

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

وثمة نهج آخر هو لتحميل النموذج في تراكب, مثل http://flowplayer.org/tools/overlay/index.html, ثم على اياكس تقديم يمكنك إغلاق تراكب.أفعل هذا في تركيبة مع الإكمال التلقائي إلى تقدم "إضافة جديدة" الخيار.مرة واحدة تراكب إرسال النموذج ، أعيد بعض البيانات json, التي تصرف على لملء الإكمال التلقائي.(أدليت به بلدي البرنامج المساعد للمساعدة مع كل هذا)

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top