【发布时间】:2024-01-22 21:09:01
【问题描述】:
我遇到了一些奇怪的问题。我正在尝试允许将 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 类。但是如果我尝试将它分配给一个变量并在其上调用["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 变量复制并粘贴到一个新变量中,并且它可以工作,但是尽管显然是哈希,但原始变量却没有也是。
【问题讨论】:
-
你能显示
jobs表的数据库架构吗? -
显然
:hashtag对我来说有两个不同的hash,似乎一个存储为US-ASCII,一个(已解析)存储为UTF-8。有趣的是,我只能通过将其粘贴到我的 irb 中来重现它。 -
@siegy22 啊啊啊啊啊啊啊!!!回头看就很明显了。非常感谢,我花了几个小时试图弄清楚为什么这不起作用。完全解决了,谢谢!如果您将此作为答案,我会接受。
标签: ruby-on-rails ruby csv import ruby-hash