我需要使用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/