无法在Postgres数组列中保存Rails 4.2数组

时间:2015-03-30 23:12:01

标签: ruby-on-rails arrays postgresql ruby-on-rails-4

我正在尝试在每个词典模型上保存一系列术语(我希望能够基本上搜索标签)。所以terms = [“apple”,“pear”,“fruit”]可能是我试图在Dictionary模型的每个实例上保存的术语数组的一个例子。以前,术语是序列化文本列。然后我将其更改为尝试利用Postgres数组数据类型,如下所示。当我尝试更新模型(例如,dictionary_example1.terms = [“fruit”,“pineapple”],然后调用save)时,所有存储的都是空数组[]。我做错了什么?

Model.rb

class Dictionary < ActiveRecord::Base
  serialize :terms, Array

end

schema.rb

create_table "clinical_trials", force: :cascade do |t|
    t.string   "terms",             array: true
  end

迁移

class ChangeTermsToArray < ActiveRecord::Migration
    def change
      change_column :dictionaries, :terms, "varchar[] USING (string_to_array(terms, ','))"
  end
end

1 个答案:

答案 0 :(得分:1)

ActiveRecord中的

serialize用于将ruby对象序列化为字符串,以便在数据库中保留ruby对象。最受欢迎的是YAML序列化器。 Rails 4内置了对Postgresql数组since 4.0的支持,因此我们不需要在模型中为数组属性设置字符串序列化。