如何生成具有枚举类型字段的模型?
我想使用生成器脚本在 Rails 中生成模型和相应的数据库表。 数据库表有一个“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?)
I want to generate a model and the corresponding database table in Rails using the generator script. The database table has a field with "enum" type. How can I generate it?
The table’s definition in SQL:
create table works {
id int unsigned not null auto_increment,
nickname varchar(20) not null,
sex enum('m', 'f') not null
};
The Rails generator command:
script/generator work nickname:string sex:(what should I write here?)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Rails 4.1 添加了
ActiveRecord::Enum
,它模拟使用整数
类型列的枚举。 只要您愿意将数据库中的列类型更改为整数,就可以使用它们。要使用这些枚举,请将
integer
放入生成命令中:然后在生成的模型文件中添加对
enum
的调用:请参阅
Enum
的文档了解更多详细信息。Rails 4.1 added
ActiveRecord::Enum
, which emulates enums using aninteger
-type column. You can use them as long as you are willing to change the column type to an integer in the database.To use these enums, put
integer
in your generate command:Then add a call to
enum
in the generated model file:See
Enum
’s documentation for more details.您可以只使用一个字符串,然后在模型上添加验证,如下所示:
validates_inclusion_of :sex, :in => %w( 中频 )
You could just use a string and then add validation on the model like this:
validates_inclusion_of :sex, :in => %w( m f )
不幸的是,有效的列类型有:整数、浮点、日期时间、日期、时间戳、时间、文本、字符串、二进制和布尔值。
尝试将列设置为字符串并使用 validates_inclusion_of 。
Unfortunately, the valid column types are: integer, float, datetime, date, timestamp, time, text, string, binary, and boolean
Try making the column a string and using
validates_inclusion_of
.使用 enum_column 为活动记录添加枚举支持
https://github.com/mdsol/enum_column
Use enum_column to add enum support to active record
https://github.com/mdsol/enum_column