我想使用 ga Postgres 9.5 数据库构建 Rails 数据库迁移,其中我有一个字符串列
def change
create_table :transactions do |t|
t.string transaction_type, null: false
但我想将列的值限制为仅某些字符串。有什么办法可以将其构建到我的迁移中吗?如果是这样,那看起来如何?
您可以在数据库中创建枚举类型并使用该类型创建新列。查看这篇文章Rails 枚举和 PostgreSQL 枚举。
我认为更好的方法是在交易控制器中为
create
操作添加一个字符串模式验证方法,如下所示。您可以在 here. 找到有关回调的更多信息
before_action :validate_transaction_type, only: [:create]
我知道这不是提出问题的用户想要的,但我最终在这里尝试对字符串列进行类似的验证。对于提出这个问题的其他人。添加验证的另一种方法是在模型中使用
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:
的别名,因此两者都应该有效。