添加具有多个状态的列
Adding column that has several states
如何通过rails 迁移添加具有多个状态的列?我知道布尔值可以有两种状态。但是,如果我想要超过 2 个状态怎么办?
如果我希望列有 4 个状态,我应该在下面的命令中包含什么?这 4 个州将被称为 "large"、"medium"、"small"、"extra_small"...
rails generate migration add_column_to_users
除非您有令人信服的性能问题,否则使用简单的 VARCHAR
(:string
类型)列通常没问题。
将您的有效状态存储在数组中,您可以在模型上设置验证以确保提供的状态正确。
如果您需要存储一组特定的值,枚举器可能会对您感兴趣。
Rails
中的枚举数
第一个解决方案是ActiveRecord::Enum
(参见doc)
示例:
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
此解决方案的缺点是您实际上在数据库中存储了 int
或 string
类型,因此并未真正强制执行约束。
数据库枚举器
第二种可能性是使用本机枚举类型,前提是您的 RDBMS 支持它。
示例:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
尽管使用此解决方案,强制执行了约束,但如果您需要集合中的新值,则需要进行数据库迁移。
文档:
如何通过rails 迁移添加具有多个状态的列?我知道布尔值可以有两种状态。但是,如果我想要超过 2 个状态怎么办?
如果我希望列有 4 个状态,我应该在下面的命令中包含什么?这 4 个州将被称为 "large"、"medium"、"small"、"extra_small"...
rails generate migration add_column_to_users
除非您有令人信服的性能问题,否则使用简单的 VARCHAR
(:string
类型)列通常没问题。
将您的有效状态存储在数组中,您可以在模型上设置验证以确保提供的状态正确。
如果您需要存储一组特定的值,枚举器可能会对您感兴趣。
Rails
中的枚举数第一个解决方案是ActiveRecord::Enum
(参见doc)
示例:
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
此解决方案的缺点是您实际上在数据库中存储了 int
或 string
类型,因此并未真正强制执行约束。
数据库枚举器
第二种可能性是使用本机枚举类型,前提是您的 RDBMS 支持它。
示例:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
尽管使用此解决方案,强制执行了约束,但如果您需要集合中的新值,则需要进行数据库迁移。
文档: