从CSV行创建的哈希不像普通哈希那样

时间:2018-06-05 12:52:39

标签: ruby-on-rails ruby csv import ruby-hash

我遇到了一些奇怪的问题。我试图允许将CSV导入我的模型。我收到hashtag错误,但这不是问题。我的模型肯定有job.to_hash列。

当我收到错误时,如果我尝试{"hashtag"=>"apples", "number"=>"10", "job_type"=>"0"},我会job.to_hash.symbolize_keys,如果我!(有或没有{:hashtag=>"apples", :number=>"10", :job_type=>"0"}),我会{{1} }}

然而,这就是问题所在。当我在它们上面调用Hash时,这两个似乎都属于.class类。但是,如果我尝试将其分配给变量并在其上调用["hashtag"][:hashtag],则会返回nil

我的意思是:

>> foo = job.to_hash.symbolize_keys
=> {:hashtag=>"apples", :number=>"10", :job_type=>"0"}
>> bar = {hashtag: "apples", number: "10", job_type: "0"}
=> {:hashtag=>"apples", :number=>"10", :job_type=>"0"}
>> foo == bar
=> false


>> foo.class
=> Hash
>> foo.class == bar.class
=> true

型号:

class Job < ApplicationRecord
  require 'csv'

  def self.import(file)
    file = CSV.read(file.path, headers:true)
    file.each { |job| Job.create(job.to_hash)}
  end
end

CSV:

hashtag,number,job_type
apples,10,0
bees,10,0
carrots,10,0

我真的不知道出了什么问题......我真的把上面的foo变量复制并粘贴到一个新的变量中它起作用了,但原来并没有尽管如此,尽管显然也是一个哈希值。

1 个答案:

答案 0 :(得分:1)

显然List < Job > sortedJobs = new ArrayList < Job > (); int SJsize = sortedJobs.size(); for (int i = SJsize - 1; i > 0; i--) { for (int j = 0; j < SJsize; j++) { if ((sortedJobs.get(i).getStartTime() > sortedJobs.get(j).getStartTime() && sortedJobs.get(i).getStartTime() < sortedJobs.get(j).getFinishTime()) || (sortedJobs.get(i).getFinishTime() > sortedJobs.get(j).getStartTime() && sortedJobs.get(i).getFinishTime() < sortedJobs.get(j).getFinishTime())) { sortedJobs.remove(i); } } }对我有两种不同的编码,好像一个存储为US-ASCII,一个(解析)存储在UTF-8中。有趣的是,我只能通过将其粘贴到我的irb中来重现这一点。

要解决此问题,请确保它们具有相同的编码