【发布时间】:2016-06-21 17:11:55
【问题描述】:
假设我在Dummy 模型上有registration_id 属性。
它的数据类型是字符串。
它的长度可以是 10-14 个字符,但我想对 仅在最后 10 个字符进行唯一性验证。 (奇怪但真实)
现在我该如何实现呢?
我想到的:
在
Dummy表中创建另一个属性last_ten_chars_registration_id以保存最后10 个字符,并为该属性设置唯一性。 (因为计算属性显然不适用于唯一性验证)我可以创建自定义验证器并编写查询。 我不确定(可能是
like查询)
谁能建议我更好的方法来实现这一点?
【问题讨论】:
-
我喜欢
last_ten_chars_registration_id的想法。并且您可以索引该列以在这些唯一性查询上获得良好的性能。数据库性能并不完全是我的驾驶室,但我想like查询不会随着时间的推移和增长而变得如此高效。 -
不是完全不同意,而是规范化而不是优化。除非有理由进行优化,例如数百万条记录或慢查询,否则我仍然认为 LIKE 检查更好。如果您有两列具有相同的数据,那么您如何确定它永远不会不同步,保持它们匹配将需要其他地方的额外逻辑。自定义验证强制执行业务逻辑,即您不能有两条具有相同最后 10 个字符的 reg ID 的记录。
标签: ruby-on-rails validation ruby-on-rails-4 activerecord postgresql-9.1