У вас есть несколько вариантов здесь.
Строковый столбец
Сериализуйте это в строку и сохраните в столбце VARCHAR.Есть много способов.
Примеры:
update orders set payment_options = '1,2,3'; -- comma separated list
update orders set payment_options = '{"visa": 1, "amex": 1}'; -- json object
Целочисленный столбец
Сохранять выбранные значения в виде битов в одном столбце типа int.
Пример:
VISA = 0x01
MASTERCARD = 0x02
AMEX = 0x04
DINERS = 0x08
update order set payment_options = #{VISA | MASTERCARD}; -- int value 3
update order set payment_options = #{MASTERCARD | DINERS}; -- int value 10
Затем вы можете проверить значение следующим образом
def visa?
(payment_options & VISA) == VISA
end
Флаги и побитовые операции могут быть немного сложными для вас, если вы никогда не будетеиспользовал их.Разделенный запятыми список, вероятно, является самым простым выбором.
Столбец массива
Очевидно, в PostgreSQL есть массивы, но я не очень много знаю об этой БД.Два предыдущих варианта являются универсальными и работают в любой базе данных.
Отношение «многие ко многим»
Это было рассмотрено миллион раз.Ключевые слова:
has_and_belongs_to_many
has_many :through