Ответ 1
В URL-адресе знак вопроса отделяет часть путь от запроса. Часть запроса обычно состоит из пар имя/значение и часто создается веб-браузером для соответствия данным, введенным пользователем в форму. Например, URL-адрес может выглядеть так:
http://example.com/submit?name=John&age=93
Здесь раздел пути в /submit
, а разделы запроса name=John&age=93
, который ссылается на значение "Джон" для ключа name
и "93" для age
.
Когда вы создаете маршрут в Sinatra, вы указываете только часть пути. Затем Sinatra анализирует запрос и делает данные в нем доступными в params
объекте. В этом примере вы можете сделать что-то вроде этого:
get '/submit' do
name = params[:name]
age = params[:age]
# use name and age variables
...
end
Если вы используете символ ?
при определении маршрута Sinatra, он делает часть URL необязательной. В примере, который вы использовали (get "/add?:string_to_add"
), он будет фактически соответствовать любому URL-адресу, начинающемуся с /ad
, а затем необязательно другому d
, а затем что-нибудь еще будет помещено в ключ :string_to_add
хэша params, а раздел запроса будет разобран отдельно. Другими словами, знак вопроса делает предыдущий символ d
необязательным.
Если вы хотите получить "сырой текст строки запроса в Sinatra, вы можете использовать метод query_string
объекта request
. В вашем примере это выглядит примерно так:
get '/add' do
string_to_add = request.query_string
...
end
Обратите внимание, что маршрут не содержит символ ?
, а только базу /add
.