Как создать модель с полем перечисления типа?
Я хочу создать модель и соответствующую таблицу базы данных в Rails с помощью генератора script. В таблице базы данных есть поле с типом "enum". Как я могу сгенерировать его?
Определение таблиц в SQL:
create table works {
id int unsigned not null auto_increment,
nickname varchar(20) not null,
sex enum('m', 'f') not null
};
Команда генератора Rails:
script/generator work nickname:string sex:(what should I write here?)
Ответы
Ответ 1
Rails 4.1 добавил ActiveRecord::Enum
, который эмулирует перечисления с использованием столбца integer
-type. Вы можете использовать их, если хотите изменить тип столбца на целое число в базе данных.
Чтобы использовать эти перечисления, поместите integer
в свою команду генерации:
bin/rails generate Work nickname:string sex:integer
Затем добавьте вызов enum
в сгенерированный файл модели:
class Work < ActiveRecord::Base
enum sex: [ :male, :female ]
end
Подробнее см. enum
документации.
Ответ 2
Вы можете просто использовать строку, а затем добавить проверку на модели следующим образом:
validates_inclusion_of: sex,: in = > % w (m f)
Ответ 3
К сожалению, допустимыми типами столбцов являются: integer, float, datetime, date, timestamp, time, text, string, binary и boolean
Попробуйте сделать столбец строкой и с помощью validates_inclusion_of
.
Ответ 4
Используйте enum_column для добавления поддержки enum к активной записи
https://github.com/mdsol/enum_column