【问题标题】:Adding column that has several states添加具有多个状态的列
【发布时间】:2016-05-30 20:00:00
【问题描述】:

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

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

rails generate migration add_column_to_users 

【问题讨论】:

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


    【解决方案1】:

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

    Rails 中的枚举器

    第一个解决方案是ActiveRecord::Enum(见doc

    例子:

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

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

    数据库枚举器

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

    例子:

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

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

    文档:

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 2017-09-11
        相关资源
        最近更新 更多