我想使用生成器脚本在Rails中生成模型和相应的数据库表。数据库表具有“枚举”类型的字段。我该如何生成它?
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?)
答案 0 :(得分:40)
Rails 4.1添加了ActiveRecord::Enum
,它使用integer
类型列模拟枚举。只要您愿意将列类型更改为数据库中的整数,就可以使用它们。
要使用这些枚举,请在生成命令中添加integer
:
bin/rails generate Work nickname:string sex:integer
然后在生成的模型文件中添加对enum
的调用:
class Work < ActiveRecord::Base
enum sex: [ :male, :female ]
end
有关详细信息,请参阅Enum
’s documentation。
答案 1 :(得分:5)
您可以使用字符串,然后在模型上添加验证,如下所示:
validates_inclusion_of:sex,:in =&gt; %w(m f)
答案 2 :(得分:4)
不幸的是,有效的列类型是:integer,float,datetime,date,timestamp,time,text,string,binary和boolean
尝试使用validates_inclusion_of
将字符串设为字符串。
答案 3 :(得分:2)
使用enum_column为活动记录添加枚举支持