搞砸
data = {
:recordset => {
:row => {
:property => [
{:name => "Code", :value => "C0001"},
{:name => "Customer", :value => "ROSSI MARIO"}
]
}
},
:@xmlns => "http://localhost/test"
}
使用的代码
result = data[:recordset][:row].each_with_object([]) do |hash, out|
out << hash[:property].each_with_object({}) do |h, o|
o[h[:name]] = h[:value]
end
end
我无法获得以下输出:
[{"Code"=>"C0001", "Customer"=>"ROSSI MARIO", "Phone1"=>"1234567890"}
错误信息:
类型错误没有将符号隐式转换为整数
在多条记录的情况下,它可以正常工作
data = {
:recordset => {
:row => [{
:property => [
{:name => "Code", :value => "C0001"},
{:name => "Customer", :value => "ROSSI MARIO"},
{:name => "Phone1", :value => "1234567890"}
]
}, {
:property => [
{:name => "Code", :value => "C0002"},
{:name => "Customer", :value => "VERDE VINCENT"},
{:name => "Phone1", :value => "9876543210"},
{:name => "Phone2", :value => "2468101214"}
]
}]
},
:@xmlns => "http://localhost/test"
}
使用的代码
data.keys
#=> [:recordset, :@xmlns]
data[:recordset][:row].count
#=> 2 # There are 2 set of attribute-value pairs
result = data[:recordset][:row].each_with_object([]) do |hash, out|
out << hash[:property].each_with_object({}) do |h, o|
o[h[:name]] = h[:value]
end
end
#=> [
# {"Code"=>"C0001", "Customer"=>"ROSSI MARIO", "Phone1"=>"1234567890"},
# {"Code"=>"C0002", "Customer"=>"VERDE VINCENT", "Phone1"=>"9876543210", "Phone2"=>"2468101214"}
# ]
如果不是数组,则可以创建一个数组,以便在处理输入之前对其进行规范化。
info = data[:recordset][:row]
info = [info] unless info.is_an? Array
result = info.each_with_object([]) do ....
在第一种情况下,数据[:记录集][:行]
不是一个数组,它是一个散列,因此当您迭代它时,Hash
变量成为数组:
[:property, [{:name=>"Code", :value=>"C0001"}, {:name=>"Customer", :value=>"ROSSI MARIO"}]]
在第二种情况下,它是一个数组,而不是一个散列,所以当你迭代它时,它变成了散列:
{:property=>[{:name=>"Code", :value=>"C0001"}, {:name=>"Customer", :value=>"ROSSI MARIO"}, {:name=>"Phone1", :value=>"1234567890"}]}
你总是假设这是第二种格式。您可以将它强制放入一个数组中,然后展平1个级别,以同等对待这两个实例:
result = [data[:recordset][:row]].flatten(1).each_with_object([]) do |hash, out|
out << hash[:property].each_with_object({}) do |h, o|
o[h[:name]] = h[:value]
end
end
# => [{"Code"=>"C0001", "Customer"=>"ROSSI MARIO"}] # result from example 1
# => [{"Code"=>"C0001", "Customer"=>"ROSSI MARIO", "Phone1"=>"1234567890"},
# {"Code"=>"C0002", "Customer"=>"VERDE VINCENT",
# "Phone1"=>"9876543210", "Phone2"=>"2468101214"}] # result from example 2
尝试使用Keral#Array()
而不是[]. flatten(1)
是很有诱惑力的,但是您必须记住Hash实现了to_a
来返回一个嵌套的键和值数组,所以Keral#Array()
不能像您希望的那样工作:
Array(data[:recordset][:row]) # using the first example data
# => [[:property, [{:name=>"Code", :value=>"C0001"}, {:name=>"Customer", :value=>"ROSSI MARIO"}]]]
我正在尝试将文件导入Excel,但是当我尝试使用相关数据创建记录时,它会向我显示以下错误: 在此行中: 这是我用来导入的列表控制器和方法: 我的方法导入到列表控制器中: 这是我的“deta”控制器:
我在尝试更改哈希值时遇到了一个奇怪的问题。我有以下设置: 当我执行此代码时,我得到:“TypeError:没有将符号隐式转换为整数”,尽管 item[:company_name] 的输出是预期的字符串。我做错了什么?
我试图创建AWS安全组,但我得到的错误在 我在遵循这个文档。知道如何解决这个错误吗? 错误:
尝试将 URL 中包含的参数转换为整数,以便在控制器中对其进行操作 - URL 的格式类似于 http://localhost:3000/charges?data=149 charges_controller.rb 如下所示: 我在better_errors屏幕中看到的参数已经检测到“数据”量: 在live shell中,如果我执行params[: data],则会出现更好的错误。to_i它返回1
我尝试使用改造2发布到rails来过滤来自params[: filter]的一些数据是: 所以我想用一个简单的参数[:filter][:id]获取id,但它,感谢您的帮助,如果它看起来是一个简单的问题,很抱歉
当创建新的学生时,Im得到错误“没有符号到整数的隐式转换” 在控制器中, 是什么导致了这个问题?