2013-04-02 13 views
10

ho bisogno di fare alcuni metodi con Sinatra che dovrebbe essere simile:Sinatra e il punto interrogativo

http //: localhost: 1234/aggiungere string_to_add

Ma quando dichiaro come questo :

get "/add?:string_to_add" do 
... 
end 

non vede l'string_to_add param.

Come dovrei dichiarare il mio metodo e utilizzare questo parametro per far funzionare le cose?

+0

Hai visto questo http://stackoverflow.com/questions/529065/how-to-use-params-with-slashes-with-sinatra? – Shmidt

+0

questa soluzione non funziona quando ho bisogno di '?' invece di '/' prima di '*' – earsonheart

risposta

17

In un URL, un punto di domanda separa la parte path dalla parte query. La parte query è normalmente composta da coppie nome/valore e viene spesso creata da un browser Web per abbinare i dati inseriti da un utente in un modulo. Ad esempio, un URL potrebbe apparire come:

http://example.com/submit?name=John&age=93 

Qui la sezione percorso nel /submit, e le sezioni di query è name=John&age=93 che si riferisce al valore di “John” per la chiave name, e “93” per il age.

Quando si usa create a route in Sinatra, si specifica solo la parte del percorso. Sinatra quindi analizza la query e rende disponibili i dati in essa contenuti nell'oggetto params. In questo esempio si potrebbe fare qualcosa di simile:

get '/submit' do 
    name = params[:name] 
    age = params[:age] 
    # use name and age variables 
    ... 
end 

Se si utilizza un carattere ? quando si definisce un percorso Sinatra, fa parte dell'URL opzionale. Nell'esempio utilizzato (get "/add?:string_to_add") corrisponderà effettivamente a qualsiasi url che inizi con /ad, quindi facoltativamente un altro d e quindi qualsiasi altra cosa verrà inserita nella chiave :string_to_add dell'hash params e la sezione di query verrà analizzata separatamente. In altre parole, il punto interrogativo rende opzionale il precedente carattere d.

Se si desidera ottenere il testo "grezzo" della stringa di query in Sinatra, è possibile utilizzare query_string method of the request object. Nel tuo esempio che sarebbe simile a questa:

get '/add' do 
    string_to_add = request.query_string 
    ... 
end 

Nota che il percorso non include il carattere ?, solo la base /add.

0

Si dovrebbe dichiareremo come:

get "/add?:string_to_add?" do 
... 
end 
Problemi correlati