【发布时间】:2018-05-04 18:54:24
【问题描述】:
我有这个迁移,我将一列从整数转换为字符串数组。
class ChangeWdayFromIntegerToStringInResourceWeekDayStart < ActiveRecord::Migration[4.2]
def up
change_column :resource_week_day_starts, :wday, :string, default: []
add_column :resource_week_day_starts, :number_days, :integer, default: 7
end
def down
change_column :resource_week_day_starts, :wday, :string, default: nil
change_column :resource_week_day_starts, :wday, 'integer USING CAST(wday AS integer)'
remove_column :resource_week_day_starts, :number_days
end
end
当我们在 rails 3 中时,此迁移工作得很好,但是我们已经迁移到 rails 5,现在我们尝试设置一个新服务器。在 rails 5 中运行迁移时,我们收到以下错误消息:
PG::DatatypeMismatch: ERROR: column "wday" cannot be cast automatically to type character varying[]
HINT: You might need to specify "USING wday::character varying[]".
: ALTER TABLE "resource_week_day_starts" ALTER COLUMN "wday" TYPE character varying[]
/home/ruby/src/mapsbooking/db/migrate/20170307000000_change_wday_from_integer_to_string_in_resource_week_day_start.rb:3:in `up'
我尝试了很多方法来解决这个问题。但没有任何效果。
谁能帮帮我
谢谢
【问题讨论】:
-
我已尝试在错误消息中添加他们建议的内容,但出现语法错误。我不知道什么是好的。
-
如果要将 resource_week_day_starts 声明为数组(字符串数据类型)列,则迁移应为
change_column :resource_week_day_starts, :wday, :string, array: true -
wday列现在是什么类型?integer?并且您想将其更改为字符串数组(即varchar[]或character varying[])? -
@muistooshort 是的,它现在是一个整数,我们想转换为不同的字符...
标签: ruby-on-rails postgresql ruby-on-rails-5 rails-migrations