如果数据库中存在重复值,我有friendly_id初始值设定项来缩短值。
# over writing the conflict slug
module FriendlyId
module Slugged
def resolve_friendly_id_conflict(candidates)
candidates.first + friendly_id_config.sequence_separator + SecureRandom.hex(3)
end
end
end
我在公司模型中使用此如下
extend FriendlyId
friendly_id :name, use: :slugged
现在,如果我将name
留空并测试验证,我将收到以下错误
NoMethodError at /members
undefined method `+' for nil:NilClass
Company#resolve_friendly_id_conflict
config/initializers/friendly_id.rb, line 5
答案 0 :(得分:1)
如果没有候选人但你的方法没有,你改变的方法能够处理。
查看原始代码......
[candidates.first, SecureRandom.uuid].compact....
契约会降低零值。
我建议您将第一个候选项转换为字符串来处理该情况。
candidates.first.to_s + friendly_id_config.sequence_separator + SecureRandom.hex(3)
更好的是,你可以坚持原始模式......只需用你自己的替换随机字段。
def resolve_friendly_id_conflict(candidates)
[candidates.first, SecureRandom.hex(3)].compact.join(friendly_id_config.sequence_separator)
end