Почему Rails не генерирует автоматически .created_at? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть созданная скаффолдами модель под названием «Pac» (комитет политических действий), у которой есть временные метки.

Я пытаюсь собрать данные о пакетах из текстового файла.В моем файле seed.rb я анализирую текстовый файл, чтобы получить хэш данных, соответствующий атрибутам моего класса ActiveRecord :: Pac.Этот хэш называется 'pac_attributes'.

Теперь я пытаюсь

Pac.find_or_create_by(pac_attributes)

и получаю следующую ошибку:

SQLite3::ConstraintException: NOT NULL constraint failed: pacs.created_at

Ну, ActiveRecord :: Pac имеет метки времени, и и мой хэш 'pac_attributes' не имеет явных записей для 'create_at' и 'updated_at', но каждый раз, когда я когда-либо использовал find_or_create_by в прошлом, эти поля генерируются автоматически (как и поле 'id').

Что происходит?Почему «find_or_create_by» завершается с ошибкой и выдает эту ошибку?

По запросу комментаторов я добавил следующую информацию:

Выдержка из файла schema.rb:

create_table "pacs", force: :cascade do |t|
  t.string "cycle"
  t.string "fec_id"
  t.string "pacshort"
  t.string "affiliate"
  t.string "ultorg"
  t.string "recipient_id"
  t.string "recipient_code"
  t.string "fec_candidate_id"
  t.string "party"
  t.string "prim_code"
  t.string "source"
  t.string "sensitive"
  t.boolean "foreign"
  t.integer "active"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

Чтобы получить хеш 'pac_attributes', я делаю следующее:

pac_columns = Pac.column_names
pac_columns.delete_if { |x| x=='id' or x=='created_at' or x=='updated_at' }
puts pac_columns
pacs = File.join(Rails.root, 'app', 'assets', 'tables', 'cmtes18.txt' )
IO.foreach(pacs) do |line|
  line.chomp!("\r\n")
  pac_data = line.split(',')
  pac_data.each do |data|
    data.gsub!(/\|/,"")
    #The textfile is formatted with entries comma-separated and enclosed in '|' characters

  end
  pac_attributes = pac_columns.map(&:to_sym).zip(pac_data).to_h
  pac_attributes.delete_if{|_,v| v=="" }
  puts pac_attributes
  pac = Pac.find_or_create_by(pac_attributes)
end

'возвращает pac_attributes':

{:cycle=>"2018", :fec_id=>"C00000018", :recipient_id=>"C00000018", :fec_candidate_id=>"H8TX22313", :foreign=>"0", :active=>"0"}

Журналы разработки возвращают следующее:

[1m[36mPac Load (0.1ms)[0m  [1m[34mSELECT  "pacs".* FROM "pacs" WHERE "pacs"."cycle" = ? AND "pacs"."fec_id" = ? AND "pacs"."recipient_id" = ? AND "pacs"."fec_candidate_id" = ? AND "pacs"."foreign" = ? AND "pacs"."active" = ? LIMIT ?[0m  [["cycle", "2018"], ["fec_id", "C00000018"], ["recipient_id", "C00000018"], ["fec_candidate_id", "H8TX22313"], ["foreign", "0"], ["active", 0], ["LIMIT", 1]]
[1m[35m (0.1ms)[0m  [1m[36mbegin transaction[0m
[1m[35mSQL (0.4ms)[0m  [1m[32mINSERT INTO "pacs" ("cycle", "fec_id", "recipient_id", "fec_candidate_id", "foreign", "active") VALUES (?, ?, ?, ?, ?, ?)[0m  [["cycle", "2018"], ["fec_id", "C00000018"], ["recipient_id", "C00000018"], ["fec_candidate_id", "H8TX22313"], ["foreign", "f"], ["active", 0]]
[1m[35m (0.0ms)[0m  [1m[31mrollback transaction[0m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...