Rails 3:比较唯一代码

时间:2011-01-05 20:27:38

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

问候。

3 个答案:

答案 0 :(得分:5)

  1. 正常方法是使用:uniqueness验证。它处理数据库搜索。
  2. 更多防弹是在该字段上使用1)+唯一索引。如果保存失败但没有验证错误,您可以生成新代码并重试。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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