[ TLDR: Проверьте свои приборы! (см. ответ ниже)]
gem 'rails', '5.2.3'
У меня есть две модели, Люди и Щенки, которые имеют отношение has_many "через". Модель соединения - Companion.
class Person < ApplicationRecord
has_many :companions, -> { order(created_at: :asc) }
has_many :puppies, through: :companions
class Puppy < ApplicationRecord
has_many :companions
has_many :people, through: :companions
class Companion < ApplicationRecord
self.table_name = 'people_puppies' #is the table name messing things up?
belongs_to :person
belongs_to :puppy
default_scope { order(created_at: :asc) }
Моя проблема в том, что отметки времени created_at
и updated_at
не работают в модели Companion. Когда я пытаюсь назначить новую связь между двумя записями ...
@person.puppies << some_puppy
# or
@person.companions << some_puppy
# or
Companion.create!(puppy: some_puppy, person: @person)
... я получаю сообщение о нарушении ограничения БД:
ActiveRecord::NotNullViolation: SQLite3::ConstraintException: NOT NULL constraint failed: people_puppies.created_at: INSERT INTO "people_puppies" ("person_id", "puppy_id") VALUES (1052040621, 904095534)
Почему Rails не добавляетметки времени?
Вот схема:
create_table "people_puppies", force: :cascade do |t|
t.integer "person_id", null: false
t.integer "puppy_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["person_id", "puppy_id"], name: "index_people_puppies_on_person_id_and_puppy_id"
t.index ["puppy_id", "person_id"], name: "index_people_puppies_on_puppy_id_and_person_id"
end