添加具有多个状态的列

时间:2016-05-30 20:00:01

标签: ruby-on-rails database rails-migrations

如何通过具有多种状态的rails迁移添加列?我知道布尔值可以有两种状态。但是,如果我想要超过2个州呢?

如果我希望列有4个状态,我应该在下面的命令中包含什么?这4个州将被称为“大”,“中”,“小”,“extra_small”......

rails generate migration add_column_to_users 

2 个答案:

答案 0 :(得分:1)

除非您使用简单的VARCHAR:string类型)列提出令人信服的性能问题,否则通常没问题。

将有效状态存储在数组中,您可以在模型上设置验证,以确保提供的状态正确。

答案 1 :(得分:1)

如果您需要存储一组特定的值,您可能会对枚举器感兴趣。

Rails中的枚举器

第一个解决方案是使用ActiveRecord::Enum(请参阅doc

示例:

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

此解决方案的缺点是您实际上在数据库中存储了intstring类型,因此实际上并未强制实施约束。

数据库枚举器

第二种可能性是使用本机Enum类型,如果您的RDBMS支持它。

示例:

CREATE TABLE shirts (
  name VARCHAR(40),
  size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);

使用此解决方案时,会强制执行约束,但如果您需要在集合中使用新值,则需要进行数据库迁移。

之证件: