【发布时间】:2019-07-03 12:29:47
【问题描述】:
我是一名初级开发人员(Ruby on Rails 5),目前正在对现有模型实施新的验证。只有当相关属性不超过 50 个字时,验证才会通过。
validates_length_of :reason, maximum: 50, too_long: 'Please reduce to 50 words or less',
tokenizer: ->(str) { str.split(/\s+/) }
很遗憾,我们的数据库中已有 54 条记录违反了此验证。因此,我正在寻找一种解决方案,以确保永远不会对这些预先存在的记录进行验证。
到目前为止,我的研究已经产生了 on: :create 选项,这似乎很有希望,但我想要一些有经验的反馈,以了解我是否会遇到问题/错误。
此验证选项是否会提供我想要的行为?
谢谢各位!
【问题讨论】:
-
我相信两个简单的测试用例应该可以回答你的问题。如果您还没有使用测试套件 - 我非常建议您这样做。它会让事情变得更容易,尤其是在这种情况下。关于您的问题-您是否考虑过用户更新他的答案的情况?如果不可能,那么你应该没问题。如果是 - 一个肮脏的解决方案是对验证施加约束,以检查 created_at 是否大于验证之前的最后一条记录。
-
这些旧记录在实施新验证后更新时是否允许超过50个字?或者只要不更新记录就只能有50多个字?
-
我设想允许将旧记录更新为超过 50 个字以避免客户混淆
标签: ruby-on-rails ruby validation activerecord ruby-on-rails-5