Я изменяю значение базовой модели, расширенной с использованием STI, в существующем приложении. Как написать миграцию, чтобы существующие столбцы соответствовали новым inheritance_column
?Rails inheritance_column migration
Вот моя первая попытка:
class MigrateStoryTypes < ActiveRecord::Migration
def self.up
Story.all.each { |story|
new_story_type = story.story_type.camelize + 'Story'
puts "changing #{story.id}'s story_type from #{story.story_type} to #{new_story_type}"
story.update_column :story_type, new_story_type
}
end
def self.down
Story.all.each { |story|
new_story_type = story.story_type.underscore.gsub /_story/, ''
puts "changing #{story.id}'s story_type from #{story.story_type} to #{new_story_type}"
story.update_column :story_type, new_story_type
}
end
end
Однако это не удается с:
ActiveRecord :: SubclassNotFound: Механизм наследование одной таблицы не удалось найти подкласс: 'clean_slate'. Эта ошибка возникает , потому что столбец «story_type» зарезервирован для хранения класса в случае наследования. Переименуйте этот столбец, если вы не намеревались его использовать , который будет использоваться для хранения класса наследования или перезаписать Story.inheritance_column, чтобы использовать другой столбец для этой информации.
Есть ли прямой способ сделать это через ActiveRecord или мне нужно использовать временный столбец, SQL и т. Д.?
Итак, у вас уже есть столбец 'story_type', который содержит подчеркнутые версии имени класса (т.е.' 'clean_slate''), и теперь вы хотите перенести это в STI, используйте« story_type »в качестве столбца STI и преобразуйте Значения 'story_type' для имен классов? Сколько у вас значений story_type? –
@muistooshort Точно. В настоящее время у меня есть два значения history_type. – pdoherty926