如何在 Rails 迁移中限制字符串列的值?

问题描述 投票:0回答:3

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

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

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

ruby-on-rails string postgresql migration ruby-on-rails-5
3个回答
1
投票

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


0
投票

我认为更好的方法是在交易控制器中为

create
操作添加一个字符串模式验证方法,如下所示。您可以在 here.

找到有关回调的更多信息
before_action :validate_transaction_type, only: [:create]

0
投票

我知道这不是提出问题的用户想要的,但我最终在这里尝试对字符串列进行类似的验证。对于提出这个问题的其他人。添加验证的另一种方法是在模型中使用

inclusion:
validator

它将进行如下:

validates :cuteness, inclusion: { within: %w(not meh okay kinda-cute), message: "%{value} is not a valid cuteness level" }

也可以改写为

validates_inclusion_of
:

  validates_inclusion_of :age, :in => 0..20 , message: "%{value} is not between 0 and 20"

最后,请注意 keyworkd

within:
in:
的别名,因此两者都应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.