如何在Sinatra应用程序中获取所有URL参数

nec*_*ous 21 ruby sinatra

使用以下Sinatra应用程序

get '/app' do
  content_type :json
  {"params" => params}.to_json
end
Run Code Online (Sandbox Code Playgroud)

调用:

/app?param1=one&param2=two&param2=alt

给出以下结果:

{"params":{"param1":"one","param2":"alt"}}

Params只有两个键,param1和param2.

我理解Sinatra将params设置为哈希值,但它并不代表所有的URL请求.

在Sinatra中有没有办法获取请求中发送的所有URL参数的列表?

小智 22

机架中的任何请求

get '/app' do
  params = request.env['rack.request.query_hash']
end
Run Code Online (Sandbox Code Playgroud)


now*_*owk 18

我相信默认情况下,同名的参数将被最后处理的参数覆盖.

您可以将params2设置为排序数组

...&param2[]=two&param2[]=alt
Run Code Online (Sandbox Code Playgroud)

或者解析查询字符串与Sinatra提供的params hash.


Lys*_*gel 10

kwon建议解析查询字符串.您可以使用CGI解析它,如下所示:

require 'cgi'

get '/app' do
  content_type :json
  {"params" => CGI::parse(request.query_string)}.to_json
end
Run Code Online (Sandbox Code Playgroud)

调用:

/app?param1=one&param2=two&param2=alt

给出以下结果:

{"params":{"param1":["one"],"param2":["two","alt"]}}