friendly_id gem,更小的散列?

friendly_id gem, smaller hash?

鉴于我的 slug 候选者是 my title,并且它已经被使用,slug 将 return 类似于:my-title-49c9938b-ece5-4175-a4a4-0bb2b0f26a27

是否有可能 friendly_id return 更小的散列?喜欢:my-title-705d62eea60a

在这种情况下,您可以创建自己的方法,然后将其传递给 friendly_id。在那里,您可以定义 FriendlyId 将使用哪些组合,以便将唯一标识符分配给您的记录作为 slug。

例如:

friendly_id :column_candidates, use: :slugged

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

如果 FriendlyId 在评估 column_candidates 中的每个列组合后无法创建唯一记录(通过 slug),那么它无论如何都会附加一个 UUID。

您可以自由添加想要添加的对象 column_candidates,可以是字符串、过程、lambda 或符号。另外方法名也可以不完全一样,可以根据需要修改。

作为最后一个资源,如果无法创建唯一标识符,您可以依靠使用 Digest::SHA1:

创建自己的简短且始终能够不是唯一的哈希
...
[-> { Digest::SHA1.hexdigest(name).chars.sample(6).join }]