【问题标题】:Rails - force array: true to serialized fieldRails - 强制数组:对序列化字段真实
【发布时间】:2018-03-23 15:39:47
【问题描述】:

在我的 Rails 应用的 schema.rb 中,我有:

create_table "reviews", force: :cascade do |t|
  t.integer  "user_id"
  t.integer  "venue_id"
  t.integer  "rating",              limit: 2
  t.text     "body"
  t.datetime "created_at",                      null: false
  t.datetime "updated_at",                      null: false
  t.string   "treatments"
end

“治疗”是一个序列化的字段:

class Review < ActiveRecord::Base
  serialize :treatments
  ...
end

我需要将“治疗”字段迁移到:

t.string   "treatments", default: [], null: false, array: true

适当的迁移应该是什么样的?

【问题讨论】:

    标签: ruby-on-rails serialization migration


    【解决方案1】:

    您正在迁移中寻找change_column 方法。

    change_column :reviews, :treatments, :string, array: true, default: [], null: false
    

    在此处查看更多详细信息和选项:http://guides.rubyonrails.org/active_record_migrations.html#changing-columns

    【讨论】:

    • 我将迁移该列并跟进。我会丢失该列中的数据吗?序列化的数据会转换成数组吗?
    • 你在使用 postgres 吗?我不相信 postgres 能够自动将您的字符串转换为自己的字符串数组。因此,如果您只是逐字运行此迁移,您可能会丢失数据。不过我还没有亲自测试过。
    • 根据这个答案 (stackoverflow.com/a/35138239/456673),您可以在您的 change_column 电话中添加类似的内容:using: "(string_to_array(treatments, ','))"。但同样,我自己还没有测试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2016-05-28
    • 2012-08-10
    • 2020-10-06
    • 2017-06-08
    • 2017-04-02
    相关资源
    最近更新 更多