【问题标题】:How can I restrict values of a string column in a Rails migration?如何在 Rails 迁移中限制字符串列的值?
【发布时间】:2017-09-23 15:59:39
【问题描述】:

我想使用 ga Postgres 9.5 数据库构建 Rails 数据库迁移,其中我有一个字符串列

  def change
    create_table :transactions do |t|
      t.string transaction_type, null: false

但我想将列的值限制为仅某些字符串。有什么方法可以将其构建到我的迁移中?如果是这样,那会是什么样子?

【问题讨论】:

  • 你能添加更多关于你想要做什么的细节吗?您可以使用枚举而不是字符串数据类型。
  • 听起来可以解决我的问题。使用“枚举”,我可以将列限制为只有某些值吗?
  • enum 不会限制数据库内部的内容,您仍然会将所有验证留给 Rails,并且(AFAIK)您的数据库最终将存储数字而不是字符串。如果您希望数据库完成这项工作,您可以使用 CHECK 约束。

标签: ruby-on-rails string postgresql migration ruby-on-rails-5


【解决方案1】:

您可以在数据库中创建枚举类型并使用该类型创建新列。查看这篇文章Rails enum and PostgreSQL enum

【讨论】:

    【解决方案2】:

    我认为更好的方法是在事务控制器中为create 操作添加一个字符串模式验证方法,如下所示。你可以找到更多关于回调的信息here

    before_action :validate_transaction_type, only: [:create]
    

    【讨论】:

    • 我希望在迁移级别而不是在我的控制器中执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多