2015-10-21 12 views
6

Desidero sapere qual è il percorso della richiesta API.Ricerca percorso percorsi dalla stringa url

consente di dire ad esempio api_v1_user_session _path è il percorso per /api/v1/users/sign_in url

Se una richiesta è venuta da /api/v1/users/sign_in Come faccio a sapere qual è il percorso. In questo scenario dovrebbe essere api_v1_user_session _path

Ho provato di seguito l'istruzione ma sta dando controller e azione ma non route.

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

Esiste un metodo come questo

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

Come posso ottenere questo percorso da URL o da request oggetto.

+0

Si vuole tornare il metodo che genera il percorso? – Swards

+0

Non sono sicuro di cosa significhi, ma sto cercando il percorso che otteniamo da "rake routes". Darei input come 'url' dall'oggetto' request' e aspetto la route di output. –

risposta

4

Con più ricerca sono riuscito a capirlo da solo.

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 

Risultato:

StringToRoute.new(request).path

+0

Bella soluzione! (Più persone dovrebbero essere così disposte a rimboccarsi le maniche e scavare nella struttura quando necessario.) –

+2

Dovrebbe trasformarlo in una gemma –