روبي على القضبان: توجيه التسلسل الهرمي للشجرة من الأماكن

StackOverflow https://stackoverflow.com/questions/1837794

سؤال

لذلك لدينا نظام قديم يتتبع الأماكن مع معرفات مثل "أوروبا / فرنسا / باريس"، وأنا أقوم ببناء كحول على القضبان لتشغيل هذا إلى عناوين URL مثل http: // foobar / الأماكن / أوروبا / فرنسا / باريس. هذا الشرط غير قابل للتفاوض، وعدد المستويات الممكنة في غير محدود، ولا يمكننا الهروب من القطابق.

إعداد Routes.rb ل http: // foobar / الأماكن / أوروبا هو تافهة:

map.resources :places

... ولكن http: // foobar / الأماكن / أوروبا / فرنسا يشكو "لا يوجد إجراء استجاب لأوروبا". حاولت:

map.connect '/places/:id', :controller => 'places', :action => 'show' 

... ولكن هذا يعطي نفس النتيجة، على ما يبدو: معرف ينتهي في الأول "/". كيف أجعل معرف يغطي أي شيء وكل شيء بعد "الأماكن"؟

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

المحلول

إلقاء نظرة على دليل التوجيه للوثائق الكاملة:

http://guides.rubyonrails.org/routing.html.

على وجه التحديد قسم "4.9 الطريق العالم".

لكنني أعتقد أن ما تريد فعله حقا هو إعلان طريقك مثل:

map.connect '/places/*id', :controller => 'places', :action => 'index'

دعا مع عنوان URL مثل

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]

ما يمكنك بسهولة (إعادة) الانضمام إلى "/" لإحداث السلسلة الكاملة التي تريدها "FOO / BAR / 1" (من المحتمل أن تضطر إلى إعادة إدراج الأقطار الرائدة يدويا.

هذا الأمر سيدفعك للذهاب.

نصائح أخرى

تعديل إجابة كودي أعلاه قليلا للتوصل إلى هذا:

map.place '/places/*id', :controller => 'places', :action => 'show'
map.connect '/places/*id.:format', :controller => 'places', :action => 'show'

باستخدام MAP.Place بدلا من الخريطة. يعرف القضبان، ما المورد الذي نتعامل معه وإنشائه place_url, place_path إلخ المساعدة بشكل صحيح.

الآن، الخط الثاني ينبغي العمل ولكن لا بفضل الخطأ أعلاه، إذن إليك حل عبارة عن عبارة عن toil_controller.rb التي تقسم المعرف يدويا وتعيين التنسيق، الافتراضي إلى XML:

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top