Хранить множество конечных значений в массиве Postgre с помощью Rails - PullRequest
0 голосов
/ 24 октября 2018

У меня есть конечный набор ситуаций (4), которые можно объединить вместе:

fragile
long
nothing_above
keep_upright

Я ищу способ сохранить их в моей БД (PostgreSQL, как это происходит).Я попытался создать выделенный тип:

CREATE TYPE parcel_peculiarity AS ENUM('fragile', 'long', 'nothing_above', 'keep_upright');

и сохранить их в массиве PG:

add_column :parcels, :peculiarity, :parcel_peculiarity, default: [], array: true

Однако, когда я запускаю эту миграцию, Rails выдает мне:

TypeError: can't quote Array

Возможно, у меня нет правильного подхода.

Любая помощь приветствуется.спасибо

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете переписать синтаксис следующим образом: -

add_column :parcels, :peculiarity, :text, array: true, default: []

или в качестве альтернативы: -

1 => Добавить столбец peculiarity: string

add_column :parcels, :peculiarity, :text

2 => Сериализациястолбец как массив в модели вот и все

class Parcel < ApplicationRecord
  serialize :peculiarity, Array
end

Запрос будет выглядеть так: -

parcel_obj = Parcel.new
parcel_obj.peculiarity = ['foo', 'bar', 'etc']
parcel_obj.save

Чтобы получить peculiarity

p = Parcel.find(x)
p.peculiarity
=> ['foo', 'bar', 'etc']
...