Ruby on rails 在ruby中解压记录/字段数组
无法解压缩rails生成的数组。这个数组看起来不错,很有意义,但解包却没有意义 下面是我为测试它而编写的ruby代码:Ruby on rails 在ruby中解压记录/字段数组,ruby-on-rails,arrays,Ruby On Rails,Arrays,无法解压缩rails生成的数组。这个数组看起来不错,很有意义,但解包却没有意义 下面是我为测试它而编写的ruby代码: assets = {"0"=>{"id"=>"1", "add_asset"=>"0"}, "1"=>{"id"=>"2", "add_asset"=>"0"}, "2"=>{"id"=>"3", "add_asset"=>"1"}} puts "assets= " + assets
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
puts "assets= " + assets.to_s
puts "size = " + assets.length.to_s
assets.each_with_index do |check, i|
puts "--i = " + i.to_s
this = check[i]
puts "this = " + this.to_s
puts "id = " + this["id"].to_s
puts "add = " + this["add_asset"].to_s
end
下面是我得到的结果:
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
puts "assets= " + assets.to_s
puts "size = " + assets.length.to_s
assets.each_with_index do |check, i|
puts "--i = " + i.to_s
this = check[i]
puts "this = " + this.to_s
puts "id = " + this["id"].to_s
puts "add = " + this["add_asset"].to_s
end
d:\Users\Michael\Documents>ruby test.rb
assets={“0”=>{“id”=>“1”,“添加资产”=>“0”},“1”=>{“id”=>“2”,“添加资产”=>“0”},“2”=>{“id”=>“3”,“添加资产”=>“1”}
尺寸=3
--i=0
这个=0
身份证=
加=
--i=1
此={“id”=>“2”,“添加资源”=>“0”}
id=2
相加=0
--i=2
这个=
test.rb:14:in“block-in”:nil:NilClass(NoMethodError)的未定义方法“[]”
来自测试。rb:10:in‘each’
来自test.rb:10:in'each_with_index'
来自测试。rb:10:in`'
问题:
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
puts "assets= " + assets.to_s
puts "size = " + assets.length.to_s
assets.each_with_index do |check, i|
puts "--i = " + i.to_s
this = check[i]
puts "this = " + this.to_s
puts "id = " + this["id"].to_s
puts "add = " + this["add_asset"].to_s
end
不要将
每个\u与\u索引一起使用
。您正在迭代哈希,而不是数组。要迭代散列的键和值,请使用hash.each | key,value |
每个带有索引的\u
将哈希转换为数组,格式为[[key1,value1],[key2,value2],…]
。这将为您提供如下内容:
[
["0", {"id"=>"1", "add_asset"=>"0"}],
["1", {"id"=>"2", "add_asset"=>"0"}],
["2", {"id"=>"3", "add_asset"=>"1"}]
]
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
assets.each do |key, val|
puts "key = #{key}"
val.each do |inner_key, inner_val|
puts " key=#{inner_key} val=#{inner_val}"
end
end
因此:
为什么读取记录“0”失败,然后成功读取记录“1”
事实并非如此。这三次都失败了,只有一次看起来是正确的
第一次迭代,i
是0,check
等于[“0”,“id”=>“1”,“add_asset”=>“0”}]
,您的块访问check[0]
,它是“0”
。然后选中“0”[“id”]
和“0”[“添加资产”]
,两者都是nil
在下一次迭代中,i
是1
,check
是[“1”,“id=>“2”,“add_asset”=>“0”}]
。块访问check[1]
并获得{“id”=>“2”,“add_asset”=>“0”}
完全是巧合,事情似乎正常
为什么它完全被记录在“2”上
在第三次迭代中,该块获得
i
的2
和[“2”、{“id”=>“3”、“add_asset”=>“1”}]
的check
。该数组没有[2]
,因此您得到nil
,然后您的块尝试访问nil[“add”]
,但失败。不要使用每个带索引的\u
。您正在迭代哈希,而不是数组。要迭代散列的键和值,请使用hash.each | key,value |
每个带有索引的\u
将哈希转换为数组,格式为[[key1,value1],[key2,value2],…]
。这将为您提供如下内容:
[
["0", {"id"=>"1", "add_asset"=>"0"}],
["1", {"id"=>"2", "add_asset"=>"0"}],
["2", {"id"=>"3", "add_asset"=>"1"}]
]
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
assets.each do |key, val|
puts "key = #{key}"
val.each do |inner_key, inner_val|
puts " key=#{inner_key} val=#{inner_val}"
end
end
因此:
为什么读取记录“0”失败,然后成功读取记录“1”
事实并非如此。这三次都失败了,只有一次看起来是正确的
第一次迭代,i
是0,check
等于[“0”,“id”=>“1”,“add_asset”=>“0”}]
,您的块访问check[0]
,它是“0”
。然后选中“0”[“id”]
和“0”[“添加资产”]
,两者都是nil
在下一次迭代中,i
是1
,check
是[“1”,“id=>“2”,“add_asset”=>“0”}]
。块访问check[1]
并获得{“id”=>“2”,“add_asset”=>“0”}
完全是巧合,事情似乎正常
为什么它完全被记录在“2”上
在第三次迭代中,该块获得
i
的2
和[“2”、{“id”=>“3”、“add_asset”=>“1”}]
的check
。该数组没有[2]
,因此您得到nil
,然后您的块尝试访问nil[“add”]
,但失败。在Ruby中,哈希和数组之间存在差异。散列几乎可以有任何东西作为键。数组只接受整数。您的散列是用键的字符串构建的。分解如下:
[
["0", {"id"=>"1", "add_asset"=>"0"}],
["1", {"id"=>"2", "add_asset"=>"0"}],
["2", {"id"=>"3", "add_asset"=>"1"}]
]
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
assets.each do |key, val|
puts "key = #{key}"
val.each do |inner_key, inner_val|
puts " key=#{inner_key} val=#{inner_val}"
end
end
输出:
key = 0
key=id val=1
key=add_asset val=0
key = 1
key=id val=2
key=add_asset val=0
key = 2
key=id val=3
key=add_asset val=1
在Ruby中,散列和数组是有区别的。散列几乎可以有任何东西作为键。数组只接受整数。您的散列是用键的字符串构建的。分解如下:
[
["0", {"id"=>"1", "add_asset"=>"0"}],
["1", {"id"=>"2", "add_asset"=>"0"}],
["2", {"id"=>"3", "add_asset"=>"1"}]
]
assets = {"0"=>{"id"=>"1", "add_asset"=>"0"},
"1"=>{"id"=>"2", "add_asset"=>"0"},
"2"=>{"id"=>"3", "add_asset"=>"1"}}
assets.each do |key, val|
puts "key = #{key}"
val.each do |inner_key, inner_val|
puts " key=#{inner_key} val=#{inner_val}"
end
end
输出:
key = 0
key=id val=1
key=add_asset val=0
key = 1
key=id val=2
key=add_asset val=0
key = 2
key=id val=3
key=add_asset val=1
谢谢在数据库和多种语言领域工作多年后,我对rails还是新手。学习新东西还是不错的!谢谢在数据库和多种语言领域工作多年后,我对rails还是新手。学习新东西还是不错的!