10

मैं उन सभी अनुरोधों को प्राप्त करना चाहता हूं जो एक विशिष्ट नियंत्रक के पास जाने के लिए एक निश्चित बाधा को पूरा करते हैं। तो मुझे एक पकड़-मार्ग की जरूरत है। मैं रेल में कैसे निर्दिष्ट करूं? क्या यह ऐसा कुछ है?रूबी पर रूबी में कैच-ऑल रूट कैसे बनाएं?

match '*', to: 'subdomain_controller#show', constraints: {subdomain: /.+\.users/} 

क्या वास्तव में सभी संभावित मार्गों को पकड़ लेंगे? यह महत्वपूर्ण है कि कई नेस्टेड निर्देशिकाएं होने पर भी कोई भी पर्ची न करे।

रेल 3.2 पर रूबी का उपयोग करके, लेकिन 4.0 तक अपग्रेड करने के लिए तैयार है।

अद्यतन: '*path' काम करने के लिए लगता है। हालांकि, जब भी मैं अपनी public निर्देशिका में फ़ाइल मौजूद हूं, तो रेल इसके बजाए रेल प्रस्तुत करता है।

+0

मुझे लगता है कि इस सवाल का जवाब यहां है: [http://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url][1] [1]: http://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url – ksu

+1

@ksu - तो यह '* path' है? और फिर 'पैरा [पथ]' पथ रखती है? –

उत्तर

0

यह काम करना चाहिए

Calamas::Application.routes.draw do 
    get '*path', to: 'subdomain_controller#show',constraints: lambda { |request| request.path =~ /.+\.users/ } 
end 
+0

इसने कोशिश नहीं की है, लेकिन ऐसा लगता है कि यह पथ के रूप में 'सबडोमेन' होने में भ्रमित हो सकता है? क्या पथ या उपडोमेन पर बाधा है? –

+0

मेरा पिछला जवाब आपके मामले में काम नहीं करेगा। मेरा अद्यतन उत्तर देखें। यहां दस्तावेज़ीकरण -> http://guides.rubyonrails.org/routing.html#advanced-constraints – usha

+0

यह 'सार्वजनिक' निर्देशिका में मौजूद रूट पथ या पथ के लिए काम नहीं करता है। रूट पथ एक बड़ा सौदा नहीं है, मैं अपनी मार्ग फ़ाइल में रूट जोड़ सकता हूं। लेकिन दूसरी समस्या मुझे नहीं पता कि कैसे उबरना है। –

18

मैं तुम्हें इस दृष्टिकोण में मामूली बदलाव की जरूरत है, लेकिन आप बात समझ:

अद्यतन:

#RAILS 3 
#make this your last route. 
match '*unmatched_route', :to => 'application#raise_not_found!' 

#RAILS 4, needs a different syntax in the routes.rb. It does not accept Match anymore. 
#make this your last route. 
get '*unmatched_route', :to => 'application#raise_not_found!' 

और

class ApplicationController < ActionController::Base 

... 
#called by last route matching unmatched routes. 
#Raises RoutingError which will be rescued from in the same way as other exceptions. 
def raise_not_found! 
    raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}") 
end 
... 

end 

अधिक जानकारी उसे ई: https://gist.github.com/Sujimichi/2349565

+0

यह 'सार्वजनिक' निर्देशिका में मौजूद रूट पथ या पथ के लिए काम नहीं करता है। रूट पथ एक बड़ा सौदा नहीं है, मैं अपनी मार्ग फ़ाइल में 'रूट टू' जोड़ सकता हूं। लेकिन दूसरी समस्या मुझे नहीं पता कि कैसे उबरना है। –

+0

रेल 4 में यह मुझे त्रुटि देता है: रेक निरस्त! आपको HTTP राइट निर्दिष्ट किए बिना अपने राउटर में 'मिलान' विधि का उपयोग नहीं करना चाहिए। यदि आप जीईटी और पोस्ट दोनों में अपनी कार्रवाई का खुलासा करना चाहते हैं, तो 'through: [: get,: post]' विकल्प जोड़ें। बजाय:: मैच "नियंत्रक # कार्रवाई" है: आप, पाने के लिए अपनी कार्रवाई का पर्दाफाश करने के रूटर में get' का उपयोग 'चाहते हैं पाने के" नियंत्रक # कार्रवाई " –

+0

हाँ मुझे लगता है, रेल 4 मार्गों में एक अलग वाक्य रचना की जरूरत है .rb। यह अब मैच स्वीकार नहीं करता है। प्राप्त '* unmatched_route',: '! आवेदन # raise_not_found' के लिए => – TheAshwaniK

संबंधित मुद्दे