#ruby-on-rails #ruby #postgresql #activerecord #ruby-on-rails-5
#ruby-on-rails #ruby #postgresql #activerecord #ruby-on-rails-5
Вопрос:
У меня есть 2 модели, которые имеют отношение 1 к 1, а именно Project
и Inspection
, структура выглядит примерно так,
class Project < ApplicationRecord
has_one :inspection
def inspection_required?
(inspection || build_inspection).required?
end
end
class Inspection < ApplicationRecord
belongs_to :project
def required?
required_saved || API.check({ id: id})
end
end
Как вы видите выше, для Project
если у нас нет Inspection
, это build_inspection
так. Я просмотрел базу данных, и кажется, что inspection
запись id
пропускает последовательность, как показано ниже,
ID | PROJECT_ID | VENDOR_TYPE | REQUIRED_SAVED | CREATED_AT | UPDATED_AT |
---|--------------|-------------|----------------|---------------------|----------------------|
1 | 7983f1a33d55 | vendor1 | false | 2020-09-12 00:43:52 | 2020-09-12 00:43:52 |
3 | asdereww224f | vendor2 | true | 2020-09-12 00:48:51 | 2020-09-12 00:48:51 |
4 | 3q3332reere1 | vendor1 | false | 2020-09-13 01:02:53 | 2020-09-13 01:02:53 |
7 | 1df343qe233a | vendor2 | true | 2020-09-14 02:43:51 | 2020-09-14 02:43:51 |
Столбец идентификатора пропускает последовательность.
Итак, мой вопрос в том, использует ли build_inpsection
последовательность, сгенерированную Postgres SQL, даже если мы не сохраняем запись?
Версия Rails: Rails 5.2.3
версия Postgres: 9.6
Комментарии:
1. Нет.
build_association
не сохраняет запись. api.rubyonrails.org/classes/ActiveRecord/Associations /…2. Это, насколько я понимаю, тоже подтвердило, что запись не сохранена. Но я не могу найти разумное объяснение того, почему
id
были пропущены, поскольку нигде в вызванном коде нет delete или destroy.