Rails CSV导入导致数字与前导0混乱

时间:2014-02-20 19:33:47

标签: ruby-on-rails postgresql csv ruby-on-rails-4

我已经编写了通过上传的CSV文件导入地址的代码,该文件有时包含领先0的邮政编码。

问题是前导0的邮政编码未正确导入。例如,使用邮政编码02420导入的地址最终会保存到1296的数据库中。不知道发生了什么事。不确定是否存在用于将02420转换为1296

的模式

所有地址的所有其他邮政编码和方面都是正确导入的。

以下是应用设置:

  • Rails 4
  • PostgreSQL的
  • Ruby CSV
  • db中的Postal Code列是一个字符串[character varying(255)]

我尝试了什么:

  • 在文本编辑器中双重检查CSV文件以确保数据完整性
  • 在每个字段周围创建带引号的CSV文件

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

好的,所以我明白了。在某个地方,它必须将02420(或任何其他带前导0的数字)转换为八进制数(感谢Melvin Kicchi

原始代码:

CSV.foreach(file.path, headers: true, skip_blanks: true, converters: :all, encoding: 'windows-1251:utf-8') do |row|

修复转化的代码:

CSV.foreach(file.path, headers: true, skip_blanks: true, encoding: 'windows-1251:utf-8') do |row|

需要删除converters: :all,因为解析器正在转换所有不同类型的数据,因此将02420作为整数传递,后来变为八进制数。

感谢您的帮助!如果我的理解是错误的,请纠正我。

您可以阅读有关Ruby's CSV Converters

的更多信息

答案 1 :(得分:0)

试试这个

 student.addresses.create(
      line1: row["address_line1"],
      line2: row["address_line2"],
      line3: row["address_line3"],
      city: row["address_city"],
      state: row["address_state"],
      postal: row["address_postal"].try(:to_s),
      country: row["address_country"],
      kind: row["address_address_kind"]
    )