Sinatra和问号

时间:2013-04-02 20:55:33

标签: ruby get sinatra params

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

  

的http //:本地主机:1234 /添加string_to_add

但是当我宣布这样的时候:

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

它没有看到string_to_add参数。

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

2 个答案:

答案 0 :(得分:18)

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

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

此处/submit中的路径部分和查询部分为name=John&age=93,其中name键的值为“John”,{{1}为“93” }}

当您在Sinatra create a route时,您只需指定路径部分。然后,Sinatra解析查询,并使age对象中的数据可用。在这个例子中,你可以这样做:

params

如果在定义Sinatra路由时使用get '/submit' do name = params[:name] age = params[:age] # use name and age variables ... end 字符,则会使url的一部分成为可选项。在您使用的示例(?)中,它实际上会匹配以get "/add?:string_to_add"开头的任何网址,然后可选地匹配另一个/ad,然后其他任何内容都将放入d params散列的键,查询部分将被单独解析。换句话说,问号使前面的:string_to_add字符可选。

如果您想在Sinatra中获取查询字符串的“原始”文本,可以使用query_string method of the request object。在您的示例中看起来像这样:

d

请注意,该路线不包含get '/add' do string_to_add = request.query_string ... end 字符,只包含基座?

答案 1 :(得分:0)

您应该将其声明为:

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