Удалить значение по умолчанию из enum - PullRequest
1 голос
/ 11 марта 2020

Можно ли удалить значение по умолчанию для перечисления? У меня есть следующее:

class Post < ApplicationRecord
  enum status: {
    auto_draft: 'auto_draft',
    draft: 'draft',
    future: 'future',
    pending: 'pending',
    private: 'private',
    publish: 'publish',
    trash: 'trash'
  }, _suffix: true
end

и следующее в миграции после публикации:

    execute <<-SQL
      ALTER TABLE posts
        ADD status enum(
          'auto_draft',
          'draft',
          'future',
          'pending',
          'private',
          'publish',
          'trash'
        ) NOT NULL AFTER id;
    SQL

Прямо сейчас, если я создаю сообщение без передачи статуса, оно будет использовать auto_draft, что является неправильным поведением: я хотел бы не иметь значение по умолчанию. Возможно ли это, и как это сделать, если ответ - да.

1 Ответ

1 голос
/ 11 марта 2020

Вы можете использовать миграцию Rails, чтобы изменить столбец на ноль

change_column_null :posts, :status, true

Это будет принимать имя таблицы, имя столбца и устанавливать для него значение null true

https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column_null

Я не знаю, как настроить перечисление. Я обычно делаю

#not null column with default
add_column :posts, :status, :integer, default: 0, null: false

# for a nullable column...
add_column :posts, :status, :integer

А потом в модели

class Post < ApplicationRecord
...
  enum status: %i[...]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...