开箱即用,当存在类似条目时,Friendly_ID 会将“--2”、“--3”... 添加到 slug 的末尾。
我知道我可以在哪里更改“sequence_separator”,但是在找到我称之为“sequencer”的东西时遇到了麻烦。我的帖子每年只会重复一次,所以我想在末尾添加年份而不是随机数。
更新 1 Yannick,感谢您为我指明正确的方向。对该方法进行了一些研究,并找到了文档和一个很好的问题来帮助我把它放在一起。
extend FriendlyId
friendly_id :race_name_and_year, use: :slugged
before_validation :race_name_and_year
def resolve_friendly_id_conflict(candidates)
candidates.first + friendly_id_config.sequence_separator + SecureRandom.uuid
end
def normalize_friendly_id(value)
value.to_s.parameterize
end
def should_generate_new_friendly_id?
slug.blank?
end
def race_name_and_year
self.slug ||= normalize_friendly_id("#{start.year}-#{name}")
end
虽然这可行,但它看起来相当复杂和混乱。当我通过 Active Admin 添加记录(即将上传)时,它也不会生成 slug。我认为最好将记录 ID 留在 URL 中,并在末尾添加实际上不用于查找记录的文本。