ruby-on-rails - 在friendly_id gem中使用之前如何更改slug?
问题描述
我试图在友好 ID 中使用之前将 slug 转换为普通字符,但它不起作用:
class CompanyJob < ApplicationRecord
extend FriendlyId
def self.convert_slug(title)
n = title.downcase.to_s
n.gsub! /[àáạãâậấẫầăặắằẵ]/, "a"
n.gsub! /[đ]/, "d"
n.gsub! /[èéẹẽêềếệễ]/, "e"
n.gsub! /[óòọõôốồộỗơớợỡờ]/, "o"
n.gsub! /[úùụũưứựừữ]/, "u"
n.gsub! /[íịìĩ]/, "i"
n.gsub! /[ýỵỹỳ]/, "y"
return n
end
friendly_id CompanyJob.convert_slug(:title), use: :slugged
但是,生成的 slug 是转换函数未更改的标题。谁能帮我解决这个问题?非常感谢!
解决方案
你有两个问题的组合:
- 您实际上是将符号传递
:title
给您的.convert_slug
方法,因此 100% 的时间它只是将其转换为字符串 'title' 并返回它。 friendly_id
事物的第一个参数不是slug,而是将被调用以获取 slug 的方法的名称(字符串或符号)。
因此,由于#1,第一个参数始终是字符串'title',friendly_id
然后尽职尽责地调用它作为方法,结果是您的原始标题值。
用另一种方法包装你的代码会得到你想要的:
class CompanyJob < ApplicationRecord
extend FriendlyId
def safe_slug
slug = title.downcase.to_s
# ... your .gsubs
slug
end
friendly_id :safe_slug, use: :slugged
推荐阅读
- google-sheets - 将正则表达式与 Switch 大小写一起使用
- css - 用表情符号(或其他 Unicode 字符)替换项目符号点(但不要更改嵌套项目符号)
- python - 尝试 pip install audioread 时退出状态 1
- nix - nix nixlang:通过 nix-build -A hello 在 default.nix 中未定义的变量 pkgs,但在 nix repl 中有效
- makefile - makefile 中的“变量”目标名称
- c++ - Arduino-C++ Bool 不会从 False 变为 True
- r - 传单:: 映射错误的国家名称
- node.js - 如何强制node.js pm2基于ipv4运行
- c++ - 使用 Visual Studio 2019 正确设置 tinycc,未找到库 libtcc1-32.a
- rust - 泛型函数中的 Rust 生命周期问题