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 }]
鉴于我的 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 }]