如何生成具有枚举类型字段的模型?

发布于 2024-07-26 23:27:59 字数 442 浏览 5 评论 0原文

我想使用生成器脚本在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

晨与橙与城 2024-08-02 23:27:59

Rails 4.1 添加了 ActiveRecord::Enum,它模拟使用整数类型列的枚举。 只要您愿意将数据库中的列类型更改为整数,就可以使用它们。

要使用这些枚举,请将 integer 放入生成命令中:

bin/rails generate Work nickname:string sex:integer

然后在生成的模型文件中添加对 enum 的调用:

class Work < ActiveRecord::Base
  enum sex: [ :male, :female ]
end

请参阅 Enum 的文档了解更多详细信息。

Rails 4.1 added ActiveRecord::Enum, which emulates enums using an integer-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:

bin/rails generate Work nickname:string sex:integer

Then add a call to enum in the generated model file:

class Work < ActiveRecord::Base
  enum sex: [ :male, :female ]
end

See Enum’s documentation for more details.

面如桃花 2024-08-02 23:27:59

您可以只使用一个字符串,然后在模型上添加验证,如下所示:

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 )

月下伊人醉 2024-08-02 23:27:59

不幸的是,有效的列类型有:整数、浮点、日期时间、日期、时间戳、时间、文本、字符串、二进制和布尔值。

尝试将列设置为字符串并使用 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.

盗梦空间 2024-08-02 23:27:59

使用 enum_column 为活动记录添加枚举支持

https://github.com/mdsol/enum_column

Use enum_column to add enum support to active record

https://github.com/mdsol/enum_column

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文