如何在 friendly_id gem 中使用前更换 slug?
How to change slug before use in friendly_id gem?
我尝试将 slug 转换为普通字符,然后再在 Friendly ID 中使用它,但它不起作用:
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' 和 returns .
friendly_id
的第一个参数 不是 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
我尝试将 slug 转换为普通字符,然后再在 Friendly ID 中使用它,但它不起作用:
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' 和 returns . friendly_id
的第一个参数 不是 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