哈希而不是id
我想在我的活动记录中使用自动生成的哈希值而不是自动递增的整数作为主键。这就提出了两个问题:
- 如何在这一代中执行 最有效的方法?
- 如何处理这种可能性 生成的哈希值已存在于 桌子?
问候, 马特乌什
I want to use auto-generated hash'es instead of auto-incremented integers in my activerecords as primary keys. This raises two questions:
- how to perform this generation in
most efficient way? - how to handle possibility that
generated hash exists already in
table?
Regards,
Mateusz
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您因为不想在网址中显示 id 而需要这样做。您可以使用像 https://github.com/peterhellberg/hashids.rb 这样的 gem
它会创建来自数据库 ID 的可逆哈希,因此哈希不需要存储在数据库中。
在模型的
to_param
方法中使用它。并在从数据库中查找记录之前解码哈希值。
If you want this because you don't want to show the id in the web url. You can use a gem like https://github.com/peterhellberg/hashids.rb
It creates a reversible hash from your database id so the hash does not need to be stored in the database.
Use it in your models
to_param
method.And decode the hash before finding the record from the database.
这可能不完全是您所要求的。但我遇到了类似的问题,我想在 URL 中使用哈希而不是 ID。我的解决方案如下,
来源:
URL 中的 Railcast #63 模型名称 - 展示如何使用 to_param 方法
It might not be exactly what you asked for. But I had a similar problem where I wanted to use a hash instead of the ID in the URL. My solution follows
Source:
Railcast #63 Model Name in URL - shows how to use the to_param method
这不是你的问题的重复,但我认为你想做同样的事情:
在 Ruby on Rails 中为每个用户分配一个唯一的 100 个字符哈希
It's not a duplicate of your question, but i think you want to do the same thing :
Assigning Each User a Unique 100 character Hash in Ruby on Rails
使用 Oracle 时,我遇到了这样的情况:我想自己创建 ID(而不是使用序列),并且在 这篇文章我提供了我是如何做到这一点的详细信息。简而言之,代码:
虽然此解决方案特定于 Oracle 增强型,但我假设在其他适配器中您可以否决相同的方法 (
next_sequence_value
)。When using Oracle i had the case where I wanted to create the ID ourselves (and not use a sequence), and in this post i provide the details how i did that. In short the code:
while this solution is specific to Oracle-enhanced, i am assuming inside the other adapters you can overrule the same method (
next_sequence_value
).