Rails 5: использует ли ActiveRecord последовательность идентификаторов при использовании build

#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.