2009-10-30 54 views
5

西纳特拉可以很容易地通过名称访问任何特定的传入表单字段:如何访问Sinatra中的所有表单域?

post "/" do 
    params['form_field_name'] 
end 

但如何一个枚举所有在请求表单字段?我在文档中找不到任何东西。我甚至试过

request.body.split('&') 

但request.body是StringIO的一个实例,而不是一个字符串。

回答

9

如果params是一个哈希,你可以尝试:

params.keys.each do |k| 
    puts "#{k} - #{params[k]}" 
end 
0

它只是一个哈希:P所以只是重复它就像你使用任何哈希

+0

是的,params是一个散列 - 但它是“GET和POST数据的联合”,正如Rack API文档所说的那样。我需要一种方法来查找POST数据,所以request.POST方法是理想的。 – davidstamm 2009-10-30 21:44:14

7

我只是在Sinatra的优秀API文档发现, Sinatra :: Request是Rack :: Request的一个子类。可用于Sinatra处理程序的请求对象继承了一个POST方法,该方法返回提交的表单字段的散列。

request.POST.each { |k,v| puts "#{k} = #{v}" } 
相关问题