سؤال

لقد كنت أحاول استخدام Routes.rb لإنشاء عنوان URL /similar-to-:product (حيث يكون المنتج ديناميكيًا) لموقع الويب الخاص بي.المشكلة هي أن Routes.rb يدعم بسهولة عناوين URL مثل /:product-similar ولكنه لا يدعم الأول لأنه يتطلب :product أن يسبقه فاصل ('/' هو فاصل لكن '-' ليس كذلك).قائمة الفواصل موجودة في ActionController::Routing::SEPARATORS.

لا يمكنني إضافة "-" كفاصل لأن المنتج يمكن أن يحتوي أيضًا على واصلة.ما هي أفضل طريقة لدعم عنوان URL مثل هذا؟

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

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

المحلول

في الواقع يمكنك إضافة - كفاصل، ثم استخدم مسار الالتفاف.

map.similar_product '/similar-to-*product', :controller => 'products', :action => 'similar'

ثم في ProductsController#similar

@product = Product.find_by_slug params[:product].join('-')

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

نصائح أخرى

سأقوم بإعادة صياغة عناوين URL الخاصة بك بحيث تكون ببساطة "مشابهة/للمنتج"

الحل السهل هو استخدام مرشح التوجيه.راجع التمهيدي للحصول على التفاصيل.

باستخدام مرشح التوجيه، يمكنك الحصول على عنوان url /similar-to-:product, ، قم بمعالجته مسبقًا /similar-to/:product قبل أن يصل إلى التعرف على التوجيه.ستحتاج أيضًا إلى إعادة المسارات التي تم إنشاؤها بعد المعالجة /similar-to/:product ل /similat-to-:product.

أنا في حيرة من أمري، ولكن هل يمكنك إضافة "إلى-" كفاصل؟

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