Rails t.array vs массив t.string: true, по умолчанию: [] - PullRequest
0 голосов
/ 31 января 2019

Я работаю с Rails 5 и POSTGRES и мне нужно добавить столбец массива.Я видел другой синтаксис для этого.

В чем разница в миграциях между ..

t.string, :A_options array: true, default: []

и

t.integer, :A_options array: true, default: []

и

t.array, :A_options

Зачем указывать тип как целое число или строку?Чем первые два отличаются от предыдущих?

Кроме того, есть ли способ добавить массив по умолчанию: [] с помощью генератора рельсов?

1 Ответ

0 голосов
/ 31 января 2019

Это создает массив строк, по умолчанию это пустой массив:

t.string :A_options, array: true, default: []

Это создает массив целых чисел, по умолчанию это пустой массив:

t.integer :A_options, array: true, default: []

Это должно бытьa NoMethodError:

t.array :A_options

В PostgreSQL нет типа «массив», только «массив X», где «X» - это другой тип столбца.Массивы PostgreSQL не являются универсальными контейнерами, такими как массивы Ruby, они больше похожи на массивы в C, C ++, Go, ...

Если вам нужен универсальный контейнер, который больше похож на массив Ruby, то, возможно, вы захотите jsonb вместо.Массив jsonb может содержать коллекцию чисел, строк, логических значений, массивов, хэшей, ... одновременно.


Что касается генератора, вы не можете указать default: [], поскольку вы вообще не можете указать default :

3.5 Модификаторы столбцов
[...]

null и default нельзя указать с помощью командной строки.

Также см. Могу ли я передать значение по умолчанию для рельсов для создания миграции?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...