如何使用枚举类型字段生成模型?

时间:2009-07-16 13:58:46

标签: ruby-on-rails enums

我想使用生成器脚本在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?)

4 个答案:

答案 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为活动记录添加枚举支持

https://github.com/mdsol/enum_column