哈希而不是id

Mat*_*usz 8 activerecord ruby-on-rails

我想在我的activerecords中使用自动生成的散列而不是自动递增的整数作为主键.这提出了两个问题:

  1. 如何以最有效的方式执行这一代?
  2. 如何处理表中已存在生成哈希的可能性?

此致,Mateusz

Mik*_*ika 8

如果你想要这个,因为你不想在网址中显示id.你可以使用像https://github.com/peterhellberg/hashids.rb这样的宝石

它从您的数据库ID创建可逆哈希,因此哈希不需要存储在数据库中.

在模型to_param方法中使用它.

class MyModel < ActiveRecord::Base

  def to_param
    Hashids.new("salt").encode(id)
  end
end
Run Code Online (Sandbox Code Playgroud)

并在从数据库中查找记录之前解码哈希.

def show
  id = Hashids.new("salt").decode(params[:id]).try(:first)
  record = MyModel.find(id)
end
Run Code Online (Sandbox Code Playgroud)


Spy*_*ros 2

这不是你的问题的重复,但我认为你想做同样的事情:

在 Ruby on Rails 中为每个用户分配一个唯一的 100 个字符的哈希值