Use Youtube-Like ID in ActiveRecord seamlessly.
Use Hashids (a.k.a. Youtube-Like ID) in ActiveRecord seamlessly.
Add the acts_as_hashids gem to your Gemfile.
gem "acts_as_hashids"
And run bundle install
.
Activate the function in any model of ActiveRecord::Base
.
class Foo < ActiveRecord::Base
acts_as_hashids
end
foo = Foo.create
# => #<Foo:0x007feb5978a7c0 id: 3>
foo.to_param
# => "ePQgabdg"
Foo.find(3)
# => #<Foo:0x007feb5978a7c0 id: 3>
Foo.find("ePQgabdg")
# => #<Foo:0x007feb5978a7c0 id: 3>
Foo.with_hashids("ePQgabdg").first
# => #<Foo:0x007feb5978a7c0 id: 3>
Only one thing you need to hash ids is put acts_as_hashids
in ApplicationRecord
, then you will see hash ids in routes URL and they are handled correctly as long as you use find
to find records.
You can customize the length of hash ids per model. The default length is 8.
class Foo < ActiveRecord::Base
acts_as_hashids length: 2
end
Foo.create.to_param
# => "Rx"
You can customize the secret of hash ids per model. The default secret is the class name. The name of base class is used for STI.
class Foo1 < ActiveRecord::Base
acts_as_hashids secret: 'my secret'
end
class Foo2 < ActiveRecord::Base
acts_as_hashids secret: 'my secret'
end
Foo1.create.to_param
# => "RxQce3a2"
Foo2.create.to_param
# => "RxQce3a2"
Specify which characters you use to generate hashids.
class Foo < ActiveRecord::Base
acts_as_hashids alphabet: '0123456789uvwxyz'
end
Foo.create(id: 1).to_param
# => "4xw8zwyv"
Execute the command below to run rspec and rubocop.
bundle exec rake
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)Copyright (c) 2014 Daisuke Taniwaki. See LICENSE for details.