2016-11-04 1 views
1

Ich versuche, den Wert einer Variablen, prop, in einer Abfragezeichenfolge von einer übergebenen URL ähnlich dem, was der Herr in this Thread tat.Abfrage-String von der Extrahier-URL erhalten, wenn vorhanden

Es funktioniert, wenn es eine Abfragezeichenfolge in der URL gibt, aber wenn nicht, bekomme ich CGI.parse undefined method 'split' for nil:NilClass Fehler. Ich habe recherchiert und das Problem liegt darin, dass keine Anfrage zu spalten ist.

Also meine Frage ist, wie kann ich für das Vorhandensein einer Abfrage Zeichenfolge testen und dann durch CGI.parse, um zu sehen, ob die prop Abfrage Zeichenfolge ist einer von ihnen? Ich nehme an, ich könnte es wahrscheinlich über Regex tun, aber ich hatte gehofft, dass es eine Lösung von Rails gab.

Jede Hilfe wäre willkommen.

Thanx

Code: Ich bin auch den Domain-Namen der URL Referrer zu bekommen versuchen. Deshalb habe ich diese Variable dort drin.

url = request.env['HTTP_REFERER'] 
encoded_url = URI.encode(url.to_s) 
parse = URI.parse(encoded_url) 
domain = parse.host 
puts domain 
params = CGI.parse(parse.query) 
puts params['prop'].first 

UPDATE: ich den Fehler entkam geht durch den beigefügten Code hinzufügen. Aber ich frage mich immer noch, ob es eine bessere Rails-Lösung gibt. Ich bin noch ziemlich neu in Rails, also möchte ich sicherstellen, dass ich es richtig mache.

if encoded_url.include? "?prop" 
    params = CGI.parse(parse.query) 
    puts params['prop'].first 
end 
+1

Sind Sie sicher, dass Sie durch Rails Tutorial gegangen sind? Dies ist eines der grundlegendsten Dinge zu tun. Bei jeder Anfrage spielt es keine Rolle, welches HTTP-Verb einen 'params'-Hash hat, den Sie in Ihrem Controller verwenden können, um den Wert des Schlüssels zu erhalten, den Sie benötigen. Kombinieren Sie es dann mit '. Present?' Methode in if sonst –

+0

Oh, ich dachte, der Params-Hash war nur innerhalb einer Rails-URL zugänglich. Ich wusste nicht, dass es auch für externe URLs verfügbar war. Ich bin auf die SO-Frage gestoßen, die meiner ähnlich war, und das hat mich auch dazu gebracht, das zu glauben. Aber es macht Sinn, dass es in jedem Fall funktionieren würde. Danke. –

+0

Lass mich wissen, ob das für dich funktioniert hat oder nicht :) –

Antwort

2

Die Schlüssel in Abfragezeichenfolge in einer URL können params[] Hash verwenden, selbst wenn die URL nicht vorhanden in der App selbst zugegriffen werden. So ist es auch für Schienen praktisch, mit der Außenwelt zu kommunizieren. Beachten Sie, dass rails alle HTTP-Verben gleich behandelt, wenn es um die Verwendung von params[] Hash geht.
Verwendung: puts params[:your_key]

Verwandte Themen