Rails 3:比较唯一代码

保证代码唯一的最佳方法是什么? 代码是XXX-XXXXX,其中X只是一个数字。

除了在数据库表中搜索代码之外,还有什么方法可以使流程更快更干净?

问候。

  1. 正常的方法是使用:uniquenessvalidation。 这处理数据库搜索。
  2. 更加防弹是在该领域使用1)+唯一索引。 如果保存失败但没有validation错误,您可以生成新代码并重试。

由于没有两次是相同的,因此使用基于时间的某种散列是保证唯一性的最简单方法。 如果你正在存储xxx-xxxx,那么你就是在限制自己。 您还可以使用唯一的自动递增值。 将值服务器端存储为要分配的下一个号码,然后在发出新的唯一ID时将其递增。

两者都是可接受的选项而不知道其他信息

基于时间的哈希实际上并不是“保证”是唯一的。 使用某种类型的哈希只是一种从大型源数据创建摘要的方法。 由于所有数据都可以用128位描述(使用md5),因此可能会遇到哈希冲突。

validation:uniquness将执行查询以确定之前是否使用了字段值。 你可以使用它,但它不应该是你唯一的解决方案。 如果该字段是唯一的,则应在数据库中的列上放置唯一索引。 如果您只依赖于railsvalidation,那么在将数据插入表中时,您将面临竞争条件的风险。 我可以绕过validation,但另一个写入也可以通过validation,最终都进入表中。

您是在生成值还是用户输入?