Как я могу написать собственный тип перечисления для столбца в миграции rails?

#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, который представляет собой довольно простые приложения, в которых вам не нужны какие — либо специфические функции БД.