Хеш, созданный из строки CSV, не ведет себя как обычный хеш - PullRequest
0 голосов
/ 05 июня 2018

У меня странные проблемы.Я пытаюсь разрешить импорт 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"}

Однако здесь возникает проблема.Кажется, что оба они принадлежат к классу 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 голосов
/ 05 июня 2018

Очевидно, что :hashtag имеет две разные кодировки для меня, похоже, одна хранится как US-ASCII, а другая (анализируется) в UTF-8.Забавно, что мне удалось воспроизвести это, только вставив это в свой irb.

Чтобы решить эту проблему, убедитесь, что они имеют одинаковую кодировку ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...