ruby - Sinatra 和问号

标签 ruby get sinatra parameters

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

http//:localhost:1234/add?string_to_add

但是当我这样声明时:

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”键,“93”代表 age .

当你create a route在 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 ,然后其他任何内容都将放入 :string_to_add 中params hash 的 key,query 部分将被单独解析。换句话说,问号使前面的 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/

相关文章:

Ruby Datamapper 左外连接

Perl 错误 : X-Died: Missing newline after chunk data:

ruby - 每个 HTTP 请求是否有一个 Rack 应用程序实例?

ruby - 从 ruby​​ 模块调用 FaSTLane 操作

ruby - pik 错误 : private method `gsub' called for nil:NilClass

Java:从定义位置的数组中获取值

encoding - httpgetrequest uri 编码为 iso-8859-2

ruby - 为什么我在此 Ruby 代码中收到 NoMethodError?

ruby - 如何测试 Rack 中间件的请求(不是响应)?

ruby - 在 VIM 中执行代码类似于 Textmate 中的 Cmd+R 或 Cmd+B Sublime Text2