2015-10-21 5 views
6

मैं जानना चाहता हूं कि एपीआई अनुरोध का मार्ग क्या है।यूआरएल स्ट्रिंग से मार्ग पथ ढूंढना

कहना उदाहरण के लिए api_v1_user_session _path /api/v1/users/sign_in यूआरएल

के लिए मार्ग है एक अनुरोध /api/v1/users/sign_in से आ रही है, तो मैं यह कैसे पता कर सकते हैं मार्ग है क्या करने देता है। इस परिदृश्य में यह api_v1_user_session _path

मैंने कथन के नीचे प्रयास किया लेकिन यह नियंत्रक और कार्रवाई दे रहा है लेकिन मार्ग नहीं है।

Rails.application.routes.recognize_path('/api/v1/users/sign_in') 
=> {:controller=>"api/v1/sessions", :action=>"new"} 

इस

Rails.application.routes.get_route('/api/v1/users/sign_in') 
=> api_v1_user_session 

की तरह किसी भी विधि मैं यूआरएल से या request वस्तु से इस मार्ग कैसे प्राप्त कर सकता है।

+0

आप वापस विधि है कि मार्ग उत्पन्न प्राप्त करना चाहते हैं? – Swards

+0

मुझे यकीन नहीं है कि इसका क्या अर्थ है, लेकिन मैं उस मार्ग की तलाश में हूं जिसे हम 'रेक मार्ग' से प्राप्त करते हैं। मैं 'अनुरोध' ऑब्जेक्ट से 'url' के रूप में इनपुट देता हूं और आउटपुट रूट की अपेक्षा करता हूं। –

उत्तर

4

अधिक खोज के साथ मैं इसे स्वयं समझने में सक्षम था।

class StringToRoute 

    attr_reader :request, :url, :verb 

    def initialize(request) 
    @request = request 
    @url = request.original_fullpath 
    @verb = request.request_method.downcase 
    end 

    def routes 
    Rails.application.routes.routes.to_a 
    end 

    def recognize_path 
    Rails.application.routes.recognize_path(url, method: get_verb) 
    end 

    def process 
    _recognize_path = recognize_path 
    routes.select do |hash| 
     if hash.defaults == _recognize_path 
     hash 
     end 
    end 
    end 

    def get_verb 
    verb.to_sym 
    end 

    def path 
    "#{verb}_#{process.name}" 
    end 
end 

परिणाम:

StringToRoute.new(request).path

+0

अच्छा समाधान! (अधिक लोगों को अपनी आस्तीन को रोल करने और आवश्यक होने पर ढांचे में खुदाई करने के लिए तैयार होना चाहिए।) –

+2

इसे एक मणि में बनाना चाहिए –

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