Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在ruby中解压记录/字段数组_Ruby On Rails_Arrays - Fatal编程技术网

Ruby on 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

无法解压缩rails生成的数组。这个数组看起来不错,很有意义,但解包却没有意义

下面是我为测试它而编写的ruby代码:

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
  • 为什么读取记录“0”失败,然后成功读取记录“1”
  • 为什么它完全被记录在“2”上

  • 不要将
    每个\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还是新手。学习新东西还是不错的!