【问题标题】:Replace empty values in array of hashes in ruby替换ruby中哈希数组中的空值
【发布时间】:2014-11-06 00:41:23
【问题描述】:

我有一个哈希数组.. 一些字段值是空白的,即 value => ""

当我尝试将它们保存在 db 中时,我收到此错误——列数与第 1 行的值计数不匹配(Mysql::Error)——这基本上是当列和值不匹配时......

我无法尝试匹配列和值.....对于某些数据可能为空,而对于其他值可能存在..

所以最好的方法似乎是替换空值,即 value => "" 放入一个 "-" ,即 value => "-"

我想将这个 {"value"=>"", "field"=>"x"} 更改为
{"value"=>"-", "field"=>"x"}

在红宝石中

我已经尝试了 alex 和 dan 的以下选项 - 但我仍然遇到错误.. 这可能会有所帮助......我的输出就像

data = {"title"=>"Book1set", "id"=>"4899364", "columns"=>[{"name"=>"", "value"=>"3.85", "field "=>"price", "sort_order"=>""}, {"name"=>"", "value"=>"1.14", "field"=>"tax", "sort_order"=>"" }]} {"title"=>"Book2set", "id"=>"4899364", "columns"=>[{"name"=>"", "value"=>"3.85", "field"= >"price", "sort_order"=>""}, {"name"=>"", "value"=>"1.14", "field"=>"tax", "sort_order"=>""}] } ......(1000多本这样的书集系列..)

然后我提取字段和值并保存在数据库中......

在某些情况下是这样的......“value”=>“”

这是我试图用“value”=>“-”替换的内容

【问题讨论】:

  • 我建议更新 MySQL 架构以允许列的 NULL 值:ALTER TABLE table MODIFY column VARCHAR(255);(或您想要的任何列类型,只要它没有 NOT NULL)。
  • 任意更改字段以允许空值并不是一个好的做法,除非空值实际上是有效的并且已经被考虑在内。在不了解原因的情况下这样做会导致表/数据库真正混乱。最好分析代码,弄清楚为什么会出现 nil 以及是否应该为 nil,然后决定 DB 是否应该允许它们。
  • 我试过了 - 但它并没有解决问题..也如上所述,这样做不是一个好习惯..

标签: ruby-on-rails ruby regex hash


【解决方案1】:

这是实现相同结果的类似但更短的方法

h = {"value"=>"", "field"=>"x"}
Hash[h.to_a.map {|k, v| [k, v.empty? ? "-" : v] }]

【讨论】:

  • 试过这个.. to_a.map 有一个错误无法识别.. 似乎在 ruby​​ 1.9 及更高版本中它不是并且必须用lines.to_a.map 替换 - 但因此 v.empty是一种更好的搜索方式
【解决方案2】:
puts [ {"value"=>"", "field"=>"x"} ].map { |h|
  h.each_key { |k| h[k] = "-" if h[k].length == 0 }
}.inspect

示例输出:

$ ruby ./t.rb  
[{"value"=>"-", "field"=>"x"}]

【讨论】:

  • 它检查长度为 0 的键,然后替换它...从技术上讲 v.empty 是一个内置功能...我认为是一个更好的选择
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2014-07-25
  • 2010-12-11
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
相关资源
最近更新 更多