如何通过具有多个状态的rails迁移添加列?我知道布尔值可以有两种状态。但是如果我想要两个以上的州呢?添加具有多个状态的列
如果我想要列有4个状态,我应该在下面的命令中包含什么?这4个国家将被称为“大”,“中”,“小”,“extra_small” ......
rails generate migration add_column_to_users
如何通过具有多个状态的rails迁移添加列?我知道布尔值可以有两种状态。但是如果我想要两个以上的州呢?添加具有多个状态的列
如果我想要列有4个状态,我应该在下面的命令中包含什么?这4个国家将被称为“大”,“中”,“小”,“extra_small” ......
rails generate migration add_column_to_users
如果您需要存储一组特定的值,您可能会对普查员感兴趣。
枚举在滑轨
第一个解决方案是用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')
);
通过这一解决方案,虽然,约束是强制执行的,但如果你需要在你设定一个新的值,你需要一个数据库迁移。
之证件:
除非你有使用简单VARCHAR
(:string
型)柱引人注目的性能问题通常是罚款。
将您的有效状态存储在数组中,您可以在模型上设置验证以确保提供的状态是正确的。