Sinatra和问号

ear*_*art 10 ruby get params sinatra

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

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

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

get "/add?:string_to_add" do
...
end
Run Code Online (Sandbox Code Playgroud)

它没有看到string_to_add参数.

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

mat*_*att 18

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

http://example.com/submit?name=John&age=93
Run Code Online (Sandbox Code Playgroud)

这里的路径部分/submit和查询部分是name=John&age=93指键的值"John" name,而"93"表示age.

当你创建一个路由在西纳特拉,仅指定路径部分.然后Sinatra解析查询,并使对象中的数据可用params.在这个例子中,你可以这样做:

get '/submit' do
  name = params[:name]
  age = params[:age]
  # use name and age variables
  ...
end
Run Code Online (Sandbox Code Playgroud)

如果?在定义Sinatra路径时使用字符,则会使url的一部分成为可选项.在您使用(get "/add?:string_to_add")的示例中,它实际上将匹配任何开头的url /ad,然后可选地匹配另一个url ,然后将其他d任何内容放入:string_to_addparams散列的键中,并且将分别解析查询部分.换句话说,问号使前面的d字符可选.

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

get '/add' do
  string_to_add = request.query_string
  ...
end
Run Code Online (Sandbox Code Playgroud)

请注意,路线不包括?角色,只包括基础/add.