使用Rails将有限值集存储在Postgre数组中

时间:2018-10-24 11:55:03

标签: ruby-on-rails arrays postgresql enums ruby-on-rails-5

我有一组可以组合在一起的有限情况(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 :(得分:0)

您可以将语法重写为:-

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']