如何生成一个包含枚举类型字段的模型?

37
我想使用生成器脚本在Rails中生成模型和相应的数据库表。数据库表有一个“枚举”类型的字段。如何生成它?
SQL中表的定义:
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个回答

57
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 的文档 以获取更多细节。


8
您可以使用一个字符串,然后像这样在模型上添加验证:
validates_inclusion_of :sex, :in => %w( m f )

6

很遗憾,有效的列类型包括:整数、浮点数、日期时间、日期、时间戳、时间、文本、字符串、二进制和布尔值。

尝试将该列设置为字符串,并使用validates_inclusion_of


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接