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
.
Hai visto questo http://stackoverflow.com/questions/529065/how-to-use-params-with-slashes-with-sinatra? – Shmidt
questa soluzione non funziona quando ho bisogno di '?' invece di '/' prima di '*' – earsonheart