问题描述
在友好 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 是由 convert 函数改变的标题。 谁能帮我解决这个问题?非常感谢!
解决方法
您有两个问题的组合:
- 您实际上是将符号
: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