#ruby-on-rails #postgresql #migration
Вопрос:
У меня есть таблица с именем пользователи, и я хочу добавить один столбец со статусом имени, в котором будут эти типы перечислений («в ожидании», «продолжается»).
Поэтому я попробовал что-то вроде этого:
def up
execute <<-SQL
CREATE TYPE statuses AS ENUM ('pending', 'on-going');
ALTER TABLE users ADD status statuses;
SQL
end
def down
execute <<-SQL
DROP TYPE statuses;
SQL
remove_column :users, :status
end
Но это всегда как-то приводит к этому:
Не удалось сбросить таблицу «пользователи» из-за следующего стандартного или неизвестного типа «статусы» для столбца «статус»
Что мне здесь делать?
Комментарии:
1. Вы пробовали
config.active_record.schema_format = :sql
config/application.rb
использоватьdb/structure.sql
вместоdb/schema.rb
этого ?2. Нет. Его там не добавили. Позвольте мне попробовать это сейчас
3. @muistooshort Но как мне добавить статус столбца с типом перечисления в мою схему.rb ?
4. Возможно, вы не сможете этого сделать без большой работы, но я всегда использую
structure.sql
, так что я не уверен. Однако это не имеет значения,structure.sql
служит той же цели, позволяя вам использовать все функции, относящиеся к конкретной базе данных, которые вы хотите.5. Хотя вы можете определить столбец с пользовательским типом в schema.rb, DSL не поддерживает определение пользовательских типов. Таким образом, он просто сломается, как только вы попытаетесь воссоздать базу данных из схемы. Как уже сказал @muistooshort, вы переросли вариант использования, в котором работает schema.rb, который представляет собой довольно простые приложения, в которых вам не нужны какие — либо специфические функции БД.