我想使用ga Postgres 9.5数据库构建Rails数据库迁移,其中我有一个字符串列
def change create_table :transactions do |t| t.string transaction_type, null: false
但是我想把列的值限制为特定的字符串。2有什么方法可以把它构建到我的迁移中吗?3如果有,看起来怎么样?
9cbw7uwe1#
你可以在数据库中创建一个枚举类型,然后用这个类型创建一个新的列。
qvsjd97n2#
我认为更好的方法是在create操作的事务控制器中添加一个字符串模式验证方法,如下所示。你可以找到更多关于回调here的信息。
create
before_action :validate_transaction_type, only: [:create]
suzh9iv83#
我知道这不是提问的用户想要的,但是我在这里结束了尝试对字符串列做一个类似的验证。对于其他遇到这个问题的人来说,另一种添加验证的方法是在模型中使用inclusion:验证器。其内容如下:
inclusion:
validates :cuteness, inclusion: { within: %w(not meh okay kinda-cute), message: "%{value} is not a valid cuteness level" }
它也可以重写为validates_inclusion_of:
validates_inclusion_of
validates_inclusion_of :age, :in => 0..20 , message: "%{value} is not between 0 and 20"
最后,请注意keyworkdwithin:是in:的别名,因此两者都可以工作。
within:
in:
3条答案
按热度按时间9cbw7uwe1#
你可以在数据库中创建一个枚举类型,然后用这个类型创建一个新的列。
qvsjd97n2#
我认为更好的方法是在
create
操作的事务控制器中添加一个字符串模式验证方法,如下所示。你可以找到更多关于回调here的信息。suzh9iv83#
我知道这不是提问的用户想要的,但是我在这里结束了尝试对字符串列做一个类似的验证。对于其他遇到这个问题的人来说,另一种添加验证的方法是在模型中使用
inclusion:
验证器。其内容如下:
它也可以重写为
validates_inclusion_of
:最后,请注意keyworkd
within:
是in:
的别名,因此两者都可以工作。