Rails4 Friendly_id独特的Slug格式化[英] Rails4 Friendly_id Unique Slug Formatting

本文是小编为大家收集整理的关于Rails4 Friendly_id独特的Slug格式化的处理方法,想解了Rails4 Friendly_id独特的Slug格式化的问题怎么解决?Rails4 Friendly_id独特的Slug格式化问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用friendly_id gem 来打击我的模型.因为当我输入相同的数据来检查时,slug 必须是唯一的,所以我在 slug 中得到一个长散列附加.

Explore     explore 
Explore     explore-7a8411ac-5af5-41a3-ab08-d32387679f2b

有没有办法告诉friendly_id 提供更好的格式化 slug,如 explore-1 和 explore-2

版本: friendly_id 5.0.4

推荐答案

同意,这似乎是相当粗暴的行为.

如果你看friendly_id/slugged.rb的代码,有2个函数处理冲突解决逻辑:

def resolve_friendly_id_conflict(candidates)
  candidates.first + friendly_id_config.sequence_separator + SecureRandom.uuid
end

# Sets the slug.
def set_slug(normalized_slug = nil)
  if should_generate_new_friendly_id?
    candidates = FriendlyId::Candidates.new(self, normalized_slug || send(friendly_id_config.base))
    slug = slug_generator.generate(candidates) || resolve_friendly_id_conflict(candidates)
    send "#{friendly_id_config.slug_column}=", slug
  end
end

所以,这个想法只是修补它.我看到 2 个选项:

  1. 只需修补 resolve_friendly_id_conflict,添加你的随机后缀.

  2. 改变这两种方法的逻辑,尝试所有的候选,直到 slug_generator.generate(candidates) 返回不为空的东西.如果所有候选人都给出 nil 则回退到 resolve_friendly_id_conflict 方法.使用这种技术,当 slug 不唯一时,您可以使用 slug 候选者附加模型的 id.

理想情况下,如果 gem 的作者添加一个配置选项来处理唯一的 slug 解析(方法符号或 proc 将生成器和候选者作为参数)或者只是检查模型是否响应某些方法,那就太好了.

此外,在某些用例中,根本不需要独特的 slugs 解决方案.例如,如果我们只想依赖 validates_uniqueness_of :slug 或候选人的唯一性验证.

本文地址:https://www.itbaoku.cn/post/786491.html