简体   繁体   中英

friendly_id gem, smaller hash?

Given that my slug candidate is my title , and it is already used, the slug will return something like: my-title-49c9938b-ece5-4175-a4a4-0bb2b0f26a27

Is it possible to have friendly_id return a smaller hash? Like: my-title-705d62eea60a

In that case you can create your own method, which you can pass then to friendly_id . There you can define what are going to be the combinations that FriendlyId will use in order to assign a unique identifier to your record as a slug.

For example:

friendly_id :column_candidates, use: :slugged

def column_candidates
  [
    :name,
    [:name, :another_column],
    [...more columns combinated as a fallback]
  ]
end

If FriendlyId can't create a unique record (by slug) after every combination of columns in column_candidates is evaluated, then it's going to append a UUID anyway.

You're free to add the objects you want to column_candidates , being strings, procs, lambdas or symbols. Also the method name doesn't have to be exactly that, you can modify it as needed.

As a last resource, and if a unique identifier can't be created, you can rely on creating your own short and always able to not be unique hash using Digest::SHA1 :

...
[-> { Digest::SHA1.hexdigest(name).chars.sample(6).join }]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM