【问题标题】:rails params hash to String:String hashrails params hash to String:String hash
【发布时间】:2012-01-26 19:01:52
【问题描述】:

我正在使用 URL http://localhost/add?add_key[0][key]=1234&add_key[0][id]=1. 进行 http 获取 我有一个 Rails 应用程序,它给了我一个简洁的参数哈希 {"add_key"=>{"0"=>{"key"=>"1234", "id"=>"1"}}。但是,当我尝试使用

将其发布到不同的服务器时
new_uri = URI.parse("http://10.10.12.1/test") 
res = Net::HTTP.post_form new_uri,params

处理帖子的服务器在请求中看到此参数

{"add_key"=>"0key1234id1"}

看起来 post_form 需要一个字符串到字符串的哈希值。那么如何将参数哈希转换为

{"add_key[0][key]" => "1234", add_key[0][id]" => "1"}

【问题讨论】:

    标签: ruby-on-rails params


    【解决方案1】:

    来自fine manual

    post_form(url, params)
    将 HTML 表单数据发布到指定的 URI 对象。表单数据必须作为从 String 到 String 的 Hash 映射提供。

    所以你对params 的需求是正确的。

    您可以在控制器中获取已解析的 params

    {"add_key"=>{"0"=>{"key"=>"1234", "id"=>"1"}}
    

    然后递归地将其打包回post_form 期望的扁平格式,但这将是很多毫无意义的忙碌工作。一个简单的方法是获取原始 URL 并使用 URI.parseCGI.parse 自己解析它,在你的控制器中是这样的:

    u = URI.parse(request.url)
    p = CGI.parse(u.query)
    

    这将使您在p 中留下{"add_key[0][key]" => "1234", "add_key[0][id]" => "1"},然后您可以将p 交给Net::HTTP.post_form

    【讨论】:

    • 效果很好!!是否有任何 Rails 方法可以将请求重定向到另一台服务器?
    • @Vasu:没有想到,但我从来没有需要它。我不知道重定向到 POST 是否会那么好。
    • 如果原始请求是 POST,则执行 CGI.parse(request.raw_post)
    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2019-07-15
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多