从 CSV 行创建的哈希不像普通哈希
Hash created from CSV row not behaving like a normal hash
我遇到了一些奇怪的问题。我试图允许将 CSV 导入我的模型。我收到 unknown attribute 'hashtag' for Job.
错误,但这不是问题所在。我的模型肯定有 hashtag
列。
当我收到错误消息时,如果我尝试执行 job.to_hash
,我会得到 {"hashtag"=>"apples", "number"=>"10", "job_type"=>"0"}
,如果我执行 job.to_hash.symbolize_keys
(有或没有 !
),我会得到 {:hashtag=>"apples", :number=>"10", :job_type=>"0"}
然而,问题来了。当我对它们调用 .class
时,这两个似乎都是 Hash
class 的。但是,如果我尝试将它分配给一个变量并对其调用 ["hashtag"]
或 [:hashtag]
,它会 returns 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
变量复制并粘贴到一个新变量中并且它有效,但原始变量没有,尽管如此,尽管显然也是哈希。
显然 :hashtag
对我来说有两种不同的编码,一种似乎存储为 US-ASCII,另一种(已解析)以 UTF-8 存储。有趣的是,我只能通过将其粘贴到我的 irb 中来重现它。
要解决这个问题,请确保它们具有相同的编码
我遇到了一些奇怪的问题。我试图允许将 CSV 导入我的模型。我收到 unknown attribute 'hashtag' for Job.
错误,但这不是问题所在。我的模型肯定有 hashtag
列。
当我收到错误消息时,如果我尝试执行 job.to_hash
,我会得到 {"hashtag"=>"apples", "number"=>"10", "job_type"=>"0"}
,如果我执行 job.to_hash.symbolize_keys
(有或没有 !
),我会得到 {:hashtag=>"apples", :number=>"10", :job_type=>"0"}
然而,问题来了。当我对它们调用 .class
时,这两个似乎都是 Hash
class 的。但是,如果我尝试将它分配给一个变量并对其调用 ["hashtag"]
或 [:hashtag]
,它会 returns 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
变量复制并粘贴到一个新变量中并且它有效,但原始变量没有,尽管如此,尽管显然也是哈希。
显然 :hashtag
对我来说有两种不同的编码,一种似乎存储为 US-ASCII,另一种(已解析)以 UTF-8 存储。有趣的是,我只能通过将其粘贴到我的 irb 中来重现它。
要解决这个问题,请确保它们具有相同的编码