Hi,
I'm using ruby HTTP classes to send POST requests to a server. The
problem is that I'm posting some many-levels hierarchical structures on
my form . When POST parameters are simple key/value there's no
serialization problem with form_data method on PostRequest.
{ :a => :b} => "a=b"
When the values are arrays it works fine too
{ :a => [:b,:c,:d]} => "a[]=b&a[]=c&a[]=d"
But when values are hashes serialization doesn't work as expected.
For example
{ :a => [{:b => :c}, {:d => :e}]} => "a[][b]=c&a[][d]=e"
I don't know if there's any other way to do it but browsing the code it
seems that only one nesting level is supported (maybe is an issue on my
ruby version 1.8.6).
I developed a tiny serialization method. Is a quick and dirty code (the
first release I've made) but it works for me.
module FormSerializer
require "erb"
include ERB::Util
def serialize_form_data(data, path = "",serialized_params = [])
if data.kind_of? Hash
data.each_pair{|k,v| token = (path == "" ? url_encode(k) :
"[#{url_encode(k)}]"); serialize_form_data(v, "#{path}#{token}",
serialized_params)}
elsif data.kind_of? Array
data.each{|v| serialize_form_data(v, "#{path}[]",
serialized_params) }
else
#end of recursion
serialized_params << "#{path}=#{url_encode(data)}"
end
return serialized_params.join("&") if (path == "")
end
#{ :a => :b} = "a=b"
#{ :a => [:b,:c,:d]} = "a[]=b&a[]=c&a[]=d"
#{ :a => :b, :b => :c} = "a=b&b=c"
#{ :a => {:b => :c}} = "a[b] = c"
#{ :a => [{:b => :c}, {:d => :e}]} = "a[][b] = c & a[][d] = e"
end
After this I only needed to modify
def form_data(params, sep = '&')
self.body = serialize_form_data(params)
self.content_type = 'application/x-www-form-urlencoded'
end
I just finished the code some hours ago, basic testing has been
performed.
Hope this will be useful for anyone!
Best regards
Dave Garcia
--
Posted via http://www.ruby-forum.com/.
PS:
On the server side Rails 2.3.2 works fine deserializing my params are :
{"a"=>[{"b"=>"c", "d"=>"e"}], "action"=>"show",
"controller"=>"identities"}
分享到:
相关推荐
Coarse-grained reconfigurable architectures (CGRAs) have drawn increasing attention...on average, as compared with the state-of-the-art methods. The runtime complexity of our approach is also acceptable.
normalize_nested_params ( obj , "contents[][style]" , 'bold' ) # => { "contents" : [ { "style" : "bold" } ] } _ . normalize_nested_params ( obj , "contents[][style]" ) # => 'bold' 在测试用例中查看更...
在本案例中,我们关注的是Spring中的Nested事务,这是一个相对复杂的特性,但非常有用,特别是在需要子事务处理的场景下。下面将详细解释这个概念。 Nested事务是基于JDBC的Savepoint机制实现的,它可以让我们在一...
在Ruby on Rails开发中,数据结构的选择对于数据库操作的效率至关重要。其中,Nested Set模型是一种常用的数据组织方式,尤其适用于管理具有层级关系的数据,如目录、菜单等。acts_as_nested_set是Rails社区中广泛...
We develop a new edge detection algorithm, holistically-nested edge detection (HED), which performs image-to-image prediction by means of a deep learning model that leverages fully convolutional ...
标题和描述均提到了“Weblogic9异常解决nested errors”,这指向了在使用WebLogic Server 9版本时可能遇到的特定错误处理问题。WebLogic Server是Oracle公司提供的一款功能强大的应用服务器,它支持多种标准协议,如...
Ruby-NestyRuby的嵌套异常是关于Ruby编程语言中错误处理的一个重要概念。在软件开发过程中,异常处理是一项关键任务,它确保程序在遇到错误时能够优雅地处理问题,而不是突然崩溃。Nesty是一个专门为Ruby设计的库,...
它支持多种高级数据结构,其中就包括嵌套表(Nested Table)。嵌套表是一种特殊类型的集合类型,允许在一个列中存储一组行,这些行可以是同一种类型的数据。本示例“Oracle Nested Table Demo”将向我们展示如何在...
安装将此行添加到您的应用程序的Gemfile中: gem 'nested_form_fields' 然后执行: $ bundle 在您的application.js文件中添加: //= require nested_form_fieldsRails 5.1+ 当Rails从默认堆栈中删除jQuery时,您将...
这就是Laravel Nestedset派上用场的地方。Nestedset是一种高效的存储和操作具有层级关系的数据模式,它允许我们进行快速的查询和便捷的操作,如插入、删除和移动节点。 Laravel Nestedset库,如`laravel-nestedset`...
"laravel-nested"很可能是一个用于在Laravel中实现嵌套集合(Nested Set)模型的库或者教程。嵌套集合是一种常用的数据结构,特别适合表示具有层级关系的数据,比如目录结构、组织架构等。 在Laravel中,我们通常...
基于Nested Logit模型的出行路线方式选择和时间价值计算,宗芳,祁文田,本文介绍了Nested Logit模型的效用最大化理论、选择树的建立以及其概率表达式;时间价值的基本计算公式。对人们由长春到吉林的出行路
"Nested Model"(嵌套模型)是处理层级数据的一种高效且灵活的方法,通常用于表示具有父子关系的数据,比如组织架构、分类目录等。在本篇博文中,我们将探讨这种模型以及如何在实际应用中利用它。 嵌套模型的核心...
在React Native开发中,我们经常会遇到需要在一个组件中嵌套多个可滚动视图的情况,这时`react-native-nested-scroll-view`就派上用场了。它是一个针对Android平台的NestedScrollView的React Native封装,旨在解决...
Laravel开发-eloquent-nested-attributes 嵌套属性允许您通过父级保存关联记录的属性。默认情况下,嵌套属性更新被关闭,您可以使用$nested属性启用它。启用嵌套属性时,将在模型上定义属性编写器。
nested exception is java.lang.NoClassDefFoundError_kmode exception" 指出的问题,是Java开发中常见的错误,通常发生在运行时。这个错误表明系统在尝试执行某个类时找不到对应的类定义。`NoClassDefFoundError` ...
sqlitejdbc-v037-nested.jar
这是ruby的#values_at哈希方法的扩展版本。 安装 将此行添加到您的应用程序的Gemfile中: gem 'values_at_nested' 然后执行: $ bundle 或将其自己安装为: $ gem install values_at_nested 用法 给定以下哈希值...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。在Android开发中,Gson库是Google提供的一个强大的工具,它能够方便地将Java对象转换为JSON字符串,以及将JSON...
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...