我需要使用Sinatra制作一些方法,如下所示:



但是当我这样声明时:

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

它没有看到string_to_add参数。

我应该如何声明我的方法并使用此参数使事情正常进行?

最佳答案

在URL中,问号将path部分与query部分分开。查询部分通常由名称/值对组成,通常由Web浏览器构造以匹配用户输入到表单中的数据。例如,URL可能看起来像:

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

在此,/submit中的路径部分和查询部分是name=John&age=93,它是name键的值“John”,而age的值是“93”。

在Sinatra中create a route时,仅指定路径部分。然后,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的可选URL,然后将其他任何内容放入params哈希的:string_to_add关键字中,并将对查询部分进行单独解析。换句话说,问号使前面的d字符为可选。

如果要在Sinatra中获取查询字符串的“原始”文本,可以使用 query_string method of the request object。在您的示例中,看起来像这样:
get '/add' do
  string_to_add = request.query_string
  ...
end

请注意,该路线不包含?字符,仅包含基础/add

关于ruby - Sinatra和问号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15774187/

10-13 08:57