Как уже упоминалось, в Rails теперь есть встроенная поддержка типа столбца citext
(начиная с 4.2).
Для переноса существующих столбцов необходимо включить расширение citext, а затем change_column
. Изменение столбца необратимо, поэтому вам понадобятся отдельные методы up
и down
.
class ConvertUserNameToCaseInsensitive < ActiveRecord::Migration[6.0]
def up
enable_extension 'citext' # only the first migration you add a citext column
change_column :user, :name, :citext
end
def down
change_column :user, :name, :string
disable_extension 'citext' # reverse order, only the first migration you add a citext column (this will be the last time you remove one in a rollback)
end
end
Отключение расширения требуется только при последнем удалении столбца citext при откате, поэтому вместо добавления некрасивых комментариев было бы лучше иметь отдельные миграции и объяснить причину, по которой в вашем сообщении фиксации:
# migration 1.rb
class EnableCitext < ActiveRecord::Migration[6.0]
def change
enable_extension 'citext'
end
end
# migration 2.rb
class ConvertUserNameToCaseInsensitive < ActiveRecord::Migration[6.0]
def up
change_column :user, :name, :citext
end
def down
change_column :user, :name, :string
end
end