Sinatra和问号

我需要用Sinatra制作一些看起来像的方法:

访问http //:本地主机:1234 /添加string_to_add

但是,当我宣布它是这样的:

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

它没有看到string_to_add参数。

我应该如何声明我的方法并使用此参数来使事情有效?

在URL中,问号将路径部分与查询部分分开。 查询部分通常由名称/值对组成,并且通常由Web浏览器构造,以匹配用户输入表单的数据。 例如,url可能如下所示:

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

这里是/submit的路径部分,查询部分是name=John&age=93 ,它指的是name键的值“John”,而age “93”。

在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" ),它实际上将匹配以/ad开头的任何url,然后可选地匹配另一个d ,然后将其他任何内容放入params散列的:string_to_add键中,并且查询部分将单独解析。 换句话说,问号使前面的d字符可选。

如果要在Sinatra中获取查询字符串的“原始”文本,可以使用request对象的query_string方法 。 在您的示例中,看起来像这样:

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

注意路线不包括? 字符,只是基数/add

你应该声明为:

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