Влияет ли virtual: true на встроенную схему? - PullRequest
1 голос
/ 06 августа 2020

В документации для Ecto.Schema говорится следующее о параметре :virtual:

:virtual - Если true, поле не сохраняется в базе данных.

Функция embedded_schema/1 говорит, что она описывает схему, хранящуюся исключительно в памяти. (т.е. он никогда не сохраняется в БД.) Означает ли это, что для встроенных схем параметр :virtual не действует?

1 Ответ

2 голосов
/ 07 августа 2020

В документации по Ecto.Schema.#embedded_schema/1 на самом деле говорится:

Встроенная схема либо встроена в другую схему , либо хранится исключительно в памяти. По этой причине встроенная схема не требует имени источника и не включает поле метаданных.

При внедрении в другую схему она действует как фрагмент, непосредственно вводимый в целевую схему, и :virtual поля действуют как обычно.

При хранении в памяти :virtual поля все еще

  • позволяют опционально пропускать проверку типа, объявляя тип :any, в отличие от других полей
  • не указано в __schema__(:fields)
  • не поддерживает запросы для типа с __schema__(:type, field)
  • не поддерживает :autogenerate или :read_after_writes параметры
...