使用Rails 5,如何使FriendlyId附加一个-“count+1”来重复slugs而不是UUID?

2024-03-09

显然,FriendlyId 已经更改了之前将数字序列附加到重复 slugs 的默认方法(这就是我想要的),现在使用 UUID:

Previous versions of FriendlyId appended a numeric sequence to make slugs unique, but this was removed to simplify using FriendlyId in concurrent code.

我目前对此功能不感兴趣,并且更喜欢使用原始方法来生成更清晰的 URL。我在哪里发现了类似的问题有人提供 https://stackoverflow.com/a/25380607/523051下面的代码来覆盖FriendlyIdnormalize_friendly_id方法来获得我想要的功能,但使用它会导致错误(wrong number of arguments (given 1, expected 0)):

def normalize_friendly_id
  count = self.count "name = #{name}"
  super + "-" + count if name > 0
end

我试图将其“转换”为FriendlyId“候选人”,但我真的不知道我在做什么,并且以下内容不起作用。关于如何调整 name_candidate 方法以产生我想要的结果有什么想法吗?

class Folder < ApplicationRecord
  extend FriendlyId
  friendly_id :name_candidates, use: [ :slugged, :scoped ], scope: :account_id

  has_ancestry

  belongs_to :account
  has_many :notes, dependent: :destroy

  validates :name, presence: true

  # # https://stackoverflow.com/a/25380607/523051
  # # overrride friendlyId to append -number to duplicate folders instead of uuid's
  # def normalize_friendly_id
  #   count = self.count "name = #{name}"
  #   super + "-" + count if name > 0
  # end

  def name_candidates
    append_number = self.count "name = #{name}" if name > 0
    [
      :name,
      :name, append_number
    ]
  end
end

注意我正在使用:scopedFriendlyId 的功能,因此对现有文件夹名称的检查应正确限定在:account_id.


Friendly_id 5 现在有一个 slug_candidates ,可以让您自定义 slug。

因此,要生成连续的 slug,您可以执行以下操作:

friendly_id :slug_candidates, use: :slugged

def slug_candidates
  [:name, :name_and_sequence]
end

def name_and_sequence
  slug = normalize_friendly_id(name)
  sequence = Model.where("slug like '#{slug}--%'").count + 2
  "#{slug}--#{sequence}"
end

这将在以下问题中讨论:https://github.com/norman/Friendly_id/issues/480 https://github.com/norman/friendly_id/issues/480

根据作者的说法,连续的 slugs 不利于性能 https://github.com/norman/friendly_id/issues/480#issuecomment-34643306.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Rails 5,如何使FriendlyId附加一个-“count+1”来重复slugs而不是UUID? 的相关文章

随机推荐

  • INNER JOIN 与“FROM”中的多个表名[重复]

    这个问题在这里已经有答案了 可能的重复 INNER JOIN 与 WHERE 子句 有什么区别 https stackoverflow com questions 1018822 inner join versus where clause
  • 检查引用完整性是否被破坏

    在我的过程中 我做了类似的事情 SET FOREIGN KEY CHECKS 0 LOAD DATA INFILE path to mytable txt INTO TABLE mytable SET FOREIGN KEY CHECKS
  • ANTLR:乘法省略“*”符号

    我正在尝试创建一个用于乘法和除法的语法 其中不需要包含 符号 我需要它来输出 AST 所以对于这样的输入 1 2 3 4 我希望 AST 是 1 2 3 4 我发现了以下内容 它使用 java 代码来创建适当的节点 grammar Test
  • 如何防止 Eclipse 自动关闭 TERMINATED lauches 控制台日志?

    After应用程序启动 执行终止 所以它不再运行 它的控制台日志保留在那里供审查 直到我们开始另一次执行 当发生新的执行时 即使是来自 ant 自动构建 所有终止的启动控制台日志都会自动关闭 那么 如何避免控制台日志自动关闭终止启动 执行
  • Lua:Lua 中具有线程结构的抢占式(非协作式)多任务处理

    我想知道 Lua 是否有内置的抢占式多任务处理工具 我想在我的多核系统上使用并发线程 我研究了协程 参见 lua users org wiki CoroutinesTutorial 和 stackoverflow com questions
  • Angular 2. 在 Promise 中失去 this 的范围

    我觉得我在这里错过了一些东西 我有一项可以获取一些数据的服务 我将其转换为承诺 然后尝试以单独的方法处理数据 一旦它命中该方法 我就失去了访问我通常从 this whatever 访问的对象的能力 如果我将 addJobsToTree 中的
  • 删除重复的列对,根据两列对行进行排序[重复]

    这个问题在这里已经有答案了 在下面的数据框中 如果行有重复对 1 4 和 4 1 被认为是同一对 我只想保留一次Var1 and Var2 我想到了排序Var1 and Var2行内 然后根据两者删除重复行Var1 and Var2 但是
  • 如何使用 FreeImage 库将纹理加载到 OpenGL?

    我正在使用 NeHe 教程学习 C 中的 OpenGL 但我尝试使用 FreeImage 库而不是 Glaux 或 SOIL 来完成它们 我认为使用 FreeImage 的好处是它的最后一次更新是在去年 10 月 而 SOIL 已经有 5
  • AJAX更新DOM后如何重新初始化(召回)FancyBox?

    我正在使用 widgetkit 插件 Joomla CMS 用于灯箱 由于 widgetkit 使用 fancybox 来显示灯箱 我在这里发布一个问题 当我不使用 AJAX 技术来更新 Joomla 网站的内容时 FancyBox 效果很
  • scipy.optimize.curve_fit,TypeError:不支持的操作数类型

    我已经进行了搜索 问题似乎类似于Python scipy 或 pow 不支持的操作数类型 list 和 list https stackoverflow com questions 9156208 python scipy unsuppor
  • 在 pyspark 中缓存数据帧

    我想更准确地了解pyspark中数据帧的方法缓存的使用 当我跑步时df cache 它返回一个数据帧 因此 如果我这样做df2 df cache 哪个数据帧在缓存中 是吗df df2 或两者 我找到了源代码DataFrame cache h
  • 如何用py2exe打包psutil?

    该应用程序在我的开发win8环境中运行良好 但是当它与py2exe打包并在生产机器上运行时 它抛出异常 无法在动态链接库 ntdll dll 中定位过程入口点 RtlIdnToAscii 日志文件的详细内容是 Traceback most
  • 使用文本字段编辑货币

    如何获得 JavaFX TextField 来编辑存储的没有派系数字 例如长整型 的货币 使用数据绑定 TextFormatter 和其他 javaFX 东西 目标应该是 Bo 拥有 LongProperty 货币价值以分为单位 可编辑的文
  • 禁用(删除)WooCommerce 4.3.x 中的营销菜单选项

    自 WooCommerce 发布以来4 3 x 之前修复了删除适用于的 营销 菜单选项的问题4 1 x不再起作用了 我想知道是否有人知道如何删除它4 3 x 我已经尝试了所有这些但没有成功 1 add filter woocommerce
  • C++ 使用 || 检查字符是否不在字符串中不工作

    我正在开发这款游戏 要求玩家再次玩 我习惯于检查条件是否不满足然后返回 false 所以最后我可以简单地添加 return true 这也有助于嵌套 如果我以相反的方式这样做 它会起作用 bool AskToPlayAgain cout l
  • 在 writeln 函数中写入撇号 - Pascal

    如何使用 Pascal 打印撇号writeln功能 例子 writeln My brother s book 行不通 因为s book超出了 写入 功能 因此编译器返回错误 Fatal Syntax error expected but i
  • 有人可以用最通俗的语言向我解释一下如何使用 EventArgs 吗?

    我知道他们和代表有关系 我已经尝试过 但我仍然不明白如何使用它们 我对事件处理程序了解一些 但我真正想知道的是如何使用大多数方法中的普通旧事件参数 下面的例子 void Page Load object sender EventArgs e
  • 使用 PHP Unit 测试特殊字符

    我正在使用 PHPUnit 和类从 Symfony2 测试我的控制器WebTestCase return self client gt request POST withdraw array amount gt 130 array arra
  • 单元测试中的 Xcode 内存泄漏检测

    运行单元测试时是否可以测试是否发生内存泄漏 我想检查我的内存管理是否正确处理 Thanks 您可以尝试使用泄漏检测仪器在仪器下运行单元测试 但是 如果您使用 OCUnit 则这仅适用于应用程序 捆绑包 测试 如果您碰巧使用其他东西 请告诉我
  • 使用Rails 5,如何使FriendlyId附加一个-“count+1”来重复slugs而不是UUID?

    显然 FriendlyId 已经更改了之前将数字序列附加到重复 slugs 的默认方法 这就是我想要的 现在使用 UUID Previous versions of FriendlyId appended a numeric sequenc